日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server--用户自定义函数

發布時間:2024/9/20 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server--用户自定义函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

除了使用系統提供的函數外,用戶還可以根據需要自定義函數。用戶自定義函數是 SQL Server 2000 新增的數據庫對象,是 SQL Server 的一大改進。與編程語言中的函數類似,Microsoft SQL Server 用戶定義函數是接受參數、執行操作(例如復雜計算)并將操作結果以值的形式返回的例程。返回值可以是單個標量值或表變量結果集。

  用戶自定義函數不能用于執行一系列改變數據庫狀態的操作,但它可以像系統函數一樣在查詢或存儲過程等的程序段中使用,也可以像存儲過程一樣通過 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

???調用多語句表值函數:和調用內聯表值函數一樣,調用時不需制定架構名。

注意:Schemabinding用于將函數綁定到它引用的對象上。函數一旦綁定,則不能刪除、修改,除非刪除綁定。

總結

以上是生活随笔為你收集整理的SQL Server--用户自定义函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。