/*
豆腐技術站
*/
CREATE FUNCTION
創建用戶定義函數
操作
用戶定義函數用 ALTER FUNCTION 修改
語法
標量函數
CREATE FUNCTION [ owner_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [
RETURNS scalar_return_data_type
[ WITH < function_option> [ [
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
內嵌表值函數
CREATE FUNCTION [ owner_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [
RETURNS TABLE
[ WITH < function_option > [ [
[ AS ]
RETURN [ ( ] select
多語句表值函數
CREATE FUNCTION [ owner_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [
RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ [
[ AS ]
BEGIN
function_body
RETURN
END
< function_option > ::=
{ ENCRYPTION | SCHEMABINDING }
< table_type_definition > ::=
( { column_definition | table_constraint } [
參數
owner_name
擁有該用戶定義函數的用戶 ID 的名稱
function_name
用戶定義函數的名稱
@parameter_name
用戶定義函數的參數
使用 @ 符號作為第一個字符來指定參數名稱
scalar_parameter_data_type
參數的數據類型
scalar_return_data_type
是標量用戶定義函數的返回值
scalar_expression
指定標量函數返回的標量值
TABLE
指定表值函數的返回值為表
在內嵌表值函數中
在多語句表值函數中
function_body
指定一系列 Transact
在標量函數中
在多語句表值函數中
select
是定義內嵌表值函數返回值的單個 SELECT 語句
ENCRYPTION
指出 SQL Server 加密包含 CREATE FUNCTION 語句文本的系統表列
SCHEMABINDING
指定將函數綁定到它所引用的數據庫對象
函數與其所引用對象的綁定關系只有在發生以下兩種情況之一時才被解除
除去了函數
在未指定 SCHEMABINDING 選項的情況下更改了函數(使用 ALTER 語句)
只有在滿足以下條件時
該函數所引用的用戶定義函數和視圖也已綁定到架構
該函數所引用的對象不是用兩部分名稱引用的
該函數及其引用的對象屬於同一數據庫
執行 CREATE FUNCTION 語句的用戶對所有該函數所引用的數據庫對象都具有 REFERENCES 權限
如果不符合以上條件
注釋
用戶定義函數為標量值函數或表值函數
如果 RETURNS 子句指定 TABLE
如果 RETURNS 子句指定的 TABLE 不附帶列的列表
如果 RETURNS 子句指定的 TABLE 類型帶有列及其數據類型
多語句函數的主體中允許使用以下語句
賦值語句
控制流語句
DECLARE 語句
SELECT 語句
游標操作
INSERT
EXECUTE 語句調用擴展存儲過程
函數的確定性和副作用
函數可以是確定的或不確定的
不確定的函數會產生副作用
不允許在用戶定義函數主體中內置不確定函數
@@CONNECTIONS @@TOTAL_ERRORS
@@CPU_BUSY @@TOTAL_READ
@@IDLE @@TOTAL_WRITE
@@IO_BUSY GETDATE
@@MAX_CONNECTIONS GETUTCDATE
@@PACK_RECEIVED NEWID
@@PACK_SENT RAND
@@PACKET_ERRORS TEXTPTR
@@TIMETICKS
盡管在用戶定義函數主體中不允許有不確定函數
由於擴展存儲過程會對數據庫產生副作用
從函數中調用擴展存儲過程
從函數內部調用時擴展存儲過程無法向客戶端返回結果集
與從批處理或存儲過程中喚醒調用相似
函數調用
在可使用標量表達式的位置可喚醒調用標量值函數
[database_name
如果用戶定義函數用於定義計算列
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22217.html