国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

CREATE FUNCTION sqlserver用戶定義函數(shù)

2024-08-31 00:44:48
字體:
供稿:網(wǎng)友
創(chuàng)建用戶定義函數(shù),它是返回值的已保存的 Transact-SQL 例程。用戶定義函數(shù)不能用于執(zhí)行一組修改全局?jǐn)?shù)據(jù)庫狀態(tài)的操作。與系統(tǒng)函數(shù)一樣,用戶定義函數(shù)可以從查詢中喚醒調(diào)用。也可以像存儲(chǔ)過程一樣,通過 EXECUTE 語句執(zhí)行。
用戶定義函數(shù)用 ALTER FUNCTION 修改,用 DROP FUNCTION 除去。

語法
標(biāo)量函數(shù)

CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option> [ [,] ...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END

內(nèi)嵌表值函數(shù)

CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS TABLE
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
RETURN [ ( ] select-stmt [ ) ]

多語句表值函數(shù)

CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
< function_option > ::=
{ ENCRYPTION | SCHEMABINDING }
< table_type_definition > ::=
( { column_definition | table_constraint } [ ,...n ] )

參數(shù)
owner_name
擁有該用戶定義函數(shù)的用戶 ID 的名稱。owner_name 必須是現(xiàn)有的用戶 ID。
function_name
用戶定義函數(shù)的名稱。函數(shù)名稱必須符合標(biāo)識(shí)符的規(guī)則,對其所有者來說,該名稱在數(shù)據(jù)庫中必須是唯一的。
@parameter_name
用戶定義函數(shù)的參數(shù)。CREATE FUNCTION 語句中可以聲明一個(gè)或多個(gè)參數(shù)。函數(shù)最多可以有 1,024 個(gè)參數(shù)。函數(shù)執(zhí)行時(shí)每個(gè)已聲明參數(shù)的值必須由用戶指定,除非該參數(shù)的默認(rèn)值已經(jīng)定義。 如果函數(shù)的參數(shù)有默認(rèn)值,在調(diào)用該函數(shù)時(shí)必須指定"default"關(guān)鍵字才能獲得默認(rèn)值。這種行為不同于存儲(chǔ)過程中有默認(rèn)值的參數(shù),在存儲(chǔ)過程中省略參數(shù)也意味著使用默認(rèn)值。
使用 @ 符號(hào)作為第一個(gè)字符來指定參數(shù)名稱。參數(shù)名稱必須符合標(biāo)識(shí)符的規(guī)則。每個(gè)函數(shù)的參數(shù)僅用于該函數(shù)本身;相同的參數(shù)名稱可以用在其它函數(shù)中。參數(shù)只能代替常量;而不能用于代替表名、列名或其它數(shù)據(jù)庫對象的名稱。
scalar_parameter_data_type
參數(shù)的數(shù)據(jù)類型。所有標(biāo)量數(shù)據(jù)類型(包括 bigint 和 sql_variant)都可用作用戶定義函數(shù)的參數(shù)。不支持 timestamp 數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型。不能指定非標(biāo)量類型(例如 cursor 和 table)。
scalar_return_data_type
是標(biāo)量用戶定義函數(shù)的返回值。scalar_return_data_type 可以是 SQL Server 支持的任何標(biāo)量數(shù)據(jù)類型(text、ntext、image 和 timestamp 除外)。
scalar_expression
指定標(biāo)量函數(shù)返回的標(biāo)量值。
TABLE
指定表值函數(shù)的返回值為表。
在內(nèi)嵌表值函數(shù)中,通過單個(gè) SELECT 語句定義 TABLE 返回值。內(nèi)嵌函數(shù)沒有相關(guān)聯(lián)的返回變量。
在多語句表值函數(shù)中,@return_variable 是 TABLE 變量,用于存儲(chǔ)和累積應(yīng)作為函數(shù)值返回的行。
function_body
指定一系列 Transact-SQL 語句定義函數(shù)的值,這些語句合在一起不會(huì)產(chǎn)生副作用。function_body 只用于標(biāo)量函數(shù)和多語句表值函數(shù)。
在標(biāo)量函數(shù)中,function_body 是一系列合起來求得標(biāo)量值的 Transact-SQL 語句。
在多語句表值函數(shù)中,function_body 是一系列填充表返回變量的 Transact-SQL 語句。
select-stmt
是定義內(nèi)嵌表值函數(shù)返回值的單個(gè) SELECT 語句。
ENCRYPTION
指出 SQL Server 加密包含 CREATE FUNCTION 語句文本的系統(tǒng)表列。使用 ENCRYPTION 可以避免將函數(shù)作為 SQL Server 復(fù)制的一部分發(fā)布。
SCHEMABINDING
指定將函數(shù)綁定到它所引用的數(shù)據(jù)庫對象。如果函數(shù)是用 SCHEMABINDING 選項(xiàng)創(chuàng)建的,則不能更改(使用 ALTER 語句)或除去(使用 DROP 語句)該函數(shù)引用的數(shù)據(jù)庫對象。
函數(shù)與其所引用對象的綁定關(guān)系只有在發(fā)生以下兩種情況之一時(shí)才被解除:
除去了函數(shù)。

在未指定 SCHEMABINDING 選項(xiàng)的情況下更改了函數(shù)(使用 ALTER 語句)。
只有在滿足以下條件時(shí),函數(shù)才能綁定到架構(gòu):
該函數(shù)所引用的用戶定義函數(shù)和視圖也已綁定到架構(gòu)。

該函數(shù)所引用的對象不是用兩部分名稱引用的。

該函數(shù)及其引用的對象屬于同一數(shù)據(jù)庫。

執(zhí)行 CREATE FUNCTION 語句的用戶對所有該函數(shù)所引用的數(shù)據(jù)庫對象都具有 REFERENCES 權(quán)限。
如果不符合以上條件,則指定了 SCHEMABINDING 選項(xiàng)的 CREATE FUNCTION 語句將失敗。
注釋
用戶定義函數(shù)為標(biāo)量值函數(shù)或表值函數(shù)。如果 RETURNS 子句指定一種標(biāo)量數(shù)據(jù)類型,則函數(shù)為標(biāo)量值函數(shù)。可以使用多條 Transact-SQL 語句定義標(biāo)量值函數(shù)。
如果 RETURNS 子句指定 TABLE,則函數(shù)為表值函數(shù)。根據(jù)函數(shù)主體的定義方式,表值函數(shù)可分為行內(nèi)函數(shù)或多語句函數(shù)。
如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數(shù)為行內(nèi)函數(shù)。行內(nèi)函數(shù)是使用單個(gè) SELECT 語句定義的表值函數(shù),該語句組成了函數(shù)的主體。該函數(shù)返回的表的列(包括數(shù)據(jù)類型)來自定義該函數(shù)的 SELECT 語句的 SELECT 列表。
如果 RETURNS 子句指定的 TABLE 類型帶有列及其數(shù)據(jù)類型,則該函數(shù)是多語句表值函數(shù)。
多語句函數(shù)的主體中允許使用以下語句。未在下面的列表中列出的語句不能用在函數(shù)主體中。
賦值語句。

控制流語句。

DECLARE 語句,該語句定義函數(shù)局部的數(shù)據(jù)變量和游標(biāo)。

SELECT 語句,該語句包含帶有表達(dá)式的選擇列表,其中的表達(dá)式將值賦予函數(shù)的局部變量。

游標(biāo)操作,該操作引用在函數(shù)中聲明、打開、關(guān)閉和釋放的局部游標(biāo)。只允許使用以 INTO 子句向局部變量賦值的 FETCH 語句;不允許使用將數(shù)據(jù)返回到客戶端的 FETCH 語句。

INSERT、UPDATE 和 DELETE 語句,這些語句修改函數(shù)的局部 table 變量。

EXECUTE 語句調(diào)用擴(kuò)展存儲(chǔ)過程。
函數(shù)的確定性和副作用
函數(shù)可以是確定的或不確定的。如果任何時(shí)候用一組特定的輸入值調(diào)用函數(shù)時(shí)返回的結(jié)果總是相同的,則這些函數(shù)為確定的。如果每次調(diào)用函數(shù)時(shí)即使用的是相同的一組特定輸入值,返回的結(jié)果總是不同的,則這些函數(shù)為不確定的。
不確定的函數(shù)會(huì)產(chǎn)生副作用。副作用是更改數(shù)據(jù)庫的某些全局狀態(tài),比如更新數(shù)據(jù)庫表或某些外部資源,如文件或網(wǎng)絡(luò)等(例如,修改文件或發(fā)送電子郵件消息)。
不允許在用戶定義函數(shù)主體中內(nèi)置不確定函數(shù);這些不確定函數(shù)如下:

@@CONNECTIONS@@TOTAL_ERRORS

@@CPU_BUSY@@TOTAL_READ

@@IDLE@@TOTAL_WRITE

@@IO_BUSYGETDATE

@@MAX_CONNECTIONSGETUTCDATE

@@PACK_RECEIVEDNEWID

@@PACK_SENTRAND

@@PACKET_ERRORSTEXTPTR

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大连市| 邓州市| 晋宁县| 岱山县| 龙江县| 康定县| 观塘区| 阆中市| 富宁县| 册亨县| 湘潭县| 应城市| 全椒县| 曲沃县| 高陵县| 平原县| 莎车县| 台前县| 昔阳县| 曲靖市| 泽普县| 东乌珠穆沁旗| 雷山县| 东辽县| 三门峡市| 深泽县| 瑞金市| 比如县| 隆子县| 岗巴县| 梅州市| 灵川县| 衡阳市| 河津市| 富平县| 淅川县| 陆良县| 顺义区| 乐安县| 两当县| 尤溪县|