您好,登錄后才能下訂單哦!
用戶自定義函數不能用于執行一系列改變數據庫狀態的操作,但它可以像系統函數一樣在查詢或存儲過程等的程序段中使用,也可以像存儲過程一樣通過 EXECUTE 命令來執行。
在 SQL Server 中根據函數返回值形式的不同將用戶自定義函數分為三種類型:
(1)標量函數
(2)內聯表值函數
(3)多語句表值函數
注意:與編程語言中的函數不同的是,SQL Server 自定義函數必須具有返回值。
標量函數
標量函數返回一個確定類型的標量值,其返回值類型為除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE類型外的其它數據類型。函數體語句定義在BEGIN-END語句內。在 RETURNS 子句中定義返回值的數據類型,并且函數的最后一條語句必須為Return語句。創建標量函數的格式:
Create Function 函數名(參數)
Returns 返回值數據類型
[With {Encryption|Schemabinding}]
[AS]
BEGIN
SQL語句(必須有Return子句)
END
舉例:
CREATE FUNCTION dbo.Max
(
@a int,
@b int
)
RETURNS int AS
BEGIN
DECLARE @max int
IF @a>@b SET @max=@a
ELSE SET @max=@b
Return @max
END
調用標量函數
可以在 T-SQL 語句中允許使用標量表達式的任何位置調用返回標量值(與標量表達式的數據類型相同)的任何函數。必須使用至少由兩部分組成名稱的函數來調用標量值函數,即架構名.對象名,如dbo.Max(12,34)。
內聯表值函數
內聯表值型函數以表的形式返回一個返回值,即它返回的是一個表。內聯表值型函數沒有由BEGIN-END 語句括起來的函數體。其返回的表是由一個位于 RETURN 子句中的 SELECT 命令從數據庫中篩選出來。內聯表值型函數功能相當于一個參數化的視圖。
Create Function 函數名(參數)
RETURNS table
[with {Encryption|Schemabinding}]
AS
Return(一條SQL語句)
舉例:
CREATE FUNCTION func (@id char(8))
RETURNS TABLE
AS
RETURN
(
SELECT * FROM student WHERE SID = @id
)
調用內聯表值函數:調用時不需指定架構名,如select * from func('51300521')
多語句表值函數
多語句表值函數可以看作標量函數和內聯表值函數的結合體。它的返回值是一個表,但它和標量型函數一樣有一個用 BEGIN-END 語句括起來的函數體,返回值的表中的數據是由函數體中的語句插入的。由此可見,它可以進行多次查詢,對數據進行多次篩選與合并,彌補了內聯表值函數的不足。
Create Function 函數名(參數)
RETURNS 表變量名 (表變量字段定義)
[with {Encryption|Schemabinding}]
AS
BEGIN
SQL語句
Return
END
舉例:
CREATE FUNCTION func(@selection int)
RETURNS @table TABLE
(
SID char(4) primary key not null,
SName nvarchar(4) null
)
AS
BEGIN
IF @selection = 0
INSERT INTO @table (SELECT SID,SName FROM student0)
ELSE
INSERT INTO @table (SELECT SID,SName FROM student1)
Return
END
調用多語句表值函數:和調用內聯表值函數一樣,調用時不需制定架構名。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。