T-SQL Functions มี 3 แบบ
Scalar : data types ที่คืนค่ากลับมาได้เป็น Text, ntext, image แต่ไม่สนับสนุน timestamp
CREATE FUNCTION dbo.getFac(
@SID nvarchar(3)
)
RETURNS /* datatype */ nvarchar(120)
AS
BEGIN
declare @name nvarchar(120)
select @name = FacName from Faculty where FacID=@SID
RETURN /* value */@name
END
การนำไปใช้งาน
SELECT DeptID, DeptName, FacID, dbo.getFac(FacID) AS FacName
FROM Dept
Inline Table-Valued : คืนค่า table data type เป็นเหมือนการนำเอา Scalar Function มาใช้ในการดึงค่าใน table มาแสดง คล้ายๆการสร้าง view เพื่อแสดง report ที่ต้องการได้
CREATE FUNCTION dbo.TableDeptFacName(
@FacID nvarchar(3)
)
RETURNS TABLE
AS
RETURN
SELECT DeptID, DeptName, FacID, dbo.getFac(FacID) AS FacName
FROM Dept
WHERE FacID=@FacID
การนำไปใช้งาน
SELECT DeptID, DeptName, FacID, FacName
FROM dbo.TableDeptFacName('002') AS TableDeptFacName_1
002 คือรหัสคณะที่ส่งเข้าไป
Multi-Statement : เป็นการคล้ายการสร้าง temp table ตามที่ต้องการ สามารถ pass parameter เข้าไปได้
CREATE FUNCTION dbo.TableTmpDeptName(
@FacID nvarchar(3)
)
RETURNS @DeptFacNameTB TABLE ([DeptID] [nvarchar] (4),[DeptName] [nvarchar] (120))
AS
BEGIN
INSERT INTO @DeptFacNameTB
SELECT DeptID,DeptName FROM Dept WHERE FacID=@FacID
DECLARE @cnt INT
SELECT @cnt = COUNT(*) FROM @DeptFacNameTB
IF @cnt = 0
INSERT INTO @DeptFacNameTB (
[DeptID],
[DeptName] )
VALUES ('000','No Department In This Faculty')
RETURN
END
การนำไปใช้งาน
SELECT DeptID, DeptName
FROM dbo.TableTmpDeptName('000') AS TableTmpDeptName_1
** ข้อดีการทำงานทั้งหมดใน function อยู่ใน Database Server ถ้าต้องการแก้ไขใดก็สามารถทำได้ที่ Server
Credit: Theerayuth@My KM
ไม่มีความคิดเห็น:
แสดงความคิดเห็น