--------------------自訂函數--------------
--建立使用者定義函數。這是一個已儲存 Transact-SQL 或通用語言執行平台 (CLR) 常式,
--該常式可返回一個值。使用者定義函數不能用於執行修改資料庫狀態的操作。
--與系統函數一樣,使用者定義函數可從查詢中調用。純量涵式和預存程序一樣,可使用 EXECUTE 語句執行。
純量涵式的文法格式
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
建立一個簡單的純量涵式
使用者定義函數不能用於執行修改資料庫狀態的操作 即不能對錶進行修改.添加.刪除
下列語句在函數內有效:
- 指派陳述式。
- TRY...CATCH 語句以外的流量控制語句。
- 定義局部資料變數和局部遊標的 DECLARE 語句。
- SELECT 語句,其中的挑選清單包含為局部變數分配值的運算式。
- 遊標操作,該操作引用在函數中聲明、開啟、關閉和釋放的局部遊標。只允許使用以 INTO 子句向局部變數賦值的 FETCH 語句;不允許使用將資料返回到用戶端的 FETCH 語句。
- 修改 table 局部變數的 INSERT、UPDATE 和 DELETE 語句。
- 調用擴充預存程序的 EXECUTE 語句。
使用者定義函數可以嵌套
也就是說,使用者定義函數可相互調用。被調用函數開始執行時,嵌套層級將增加;被調用函數執行結束後,嵌套層級將減少。使用者定義函數的嵌套層級最多可達 32 級。如果超出最大嵌套層級數,整個調用函數鏈將失敗。
Code
CREATE FUNCTION HelloWordFunction(@Text VARCHAR(10))
--參數的類型和長度必須指定大小如果不指定會出現值的長度丟失
--傳回值的長度也要指定
RETURNS VARCHAR(10)
BEGIN
RETURN @Text
END
調用方式
方式一 :純量涵式和預存程序一樣,可使用 EXECUTE 語句執行
Code
DECLARE @ReturnValue VARCHAR(10)
EXECUTE @ReturnValue=dbo.HelloWordFunction 'HelloWrod'
PRINT @ReturnValue
結果:
方式二:直接調用
Code
PRINT dbo.[HelloWordFunction]('Hello')