使用者自定義函式(user defined functions
)是sql server
的資料庫物件,它
不能用於執行一系列改變資料庫狀態的操作,但它可以像系統函式一樣在查詢或儲存過程等的程式段中使用,也可以像儲存過程一樣通過
execute
命令來執行。使用者自定義函式中儲存了乙個
transact-sql
例程,可以返回一定的值。
在sql server
中根據函式返回值形式的不同將使用者自定義函式分為三種型別:
標量型函式(
scalar functions
)標量型函式返回乙個確定型別的標量值其返回值型別為除
text
、ntext
、image
、cursor
、timestamp
和table
型別外的其它資料型別。函式體語句定義在
begin-end
語句內,其中包含了可以返回值的
transact-sql
命令。內聯錶值型函式(
inline table-valued functions
)內聯錶值型函式以表的形式返回乙個返回值,即它返回的是乙個表內聯錶值型函式沒有由
begin-end
語句括起來的函式體。其返回的表由乙個位於
return
子句中的
select
命令段從資料庫中篩選出來。內聯錶值型函式功能相當於乙個引數化的檢視。
多宣告錶值型函式(
multi-statement table-valued functions
)多宣告錶值型函式可以看作標量型和內聯錶值型函式的結合體。它的返回值是乙個表,但它和標量型函式一樣有乙個用
begin-end
語句括起來的函式體,返回值的表中的資料是由函式體中的語句插入的。由此可見,它可以進行多次查詢,對資料進行多次篩選與合併,彌補了內聯錶值型函式的不足。
sql server
為三種型別的使用者自定義函式提供了不同的命令建立格式。(1
)建立標量型使用者自定義函式(
scalar functions
)其語法如下:
各引數說明如下:
owner_name
:指定使用者自定義函式的所有者。
function_name
:指定使用者自定義函式的名稱。
database_name.owner_name.function_name
應是惟一的。
@parameter_name
:定義乙個或多個引數的名稱。乙個函式最多可以定義
1024
個引數每個引數前用
「@」符號標明。引數的作用範圍是整個函式。引數只能替代常量,不能替代表名、列名或其它資料庫物件的名稱。使用者自定義函式不支援輸出引數。
scalar_parameter_data_type
:指定標量型引數的資料型別,可以為除
text
、ntext
、image
、cursor
、timestamp
和table
型別外的其它資料型別。
scalar_return_data_type
:指定標量型返回值的資料型別,可以為除
text
、ntext
、image
、cursor
、timestamp
和table
型別外的其它資料型別。
scalar_expression
:指定標量型使用者自定義函式返回的標量值表示式。
function_body
:指定一系列的
transact-sql
語句,它們決定了函式的返回值。
encryption
:加密選項。讓
sql server
對系統表中有關
create function
的宣告加密,以防止使用者自定義函式作為
sql server
複製的一部分被發布(
publish)。
schemabinding
:計畫繫結選項將使用者自定義函式繫結到它所引用的資料庫物件如果指定了此選項,則函式所涉及的資料庫物件從此將不能被刪除或修改,除非函式被刪除或去掉此選項。應注意的是,要繫結的資料庫物件必須與函式在同一資料庫中。
(2)建立內聯錶值型使用者自定義函式(
inline table-valued functions
)其語法如下:
各引數說明如下:
table
:指定返回值為乙個表。
select-stmt
:單個select
語句,確定返回的表的資料。
其餘引數與標量型使用者自定義函式相同。
(3)建立多宣告錶值型使用者自定義函式
其語法如下:
各引數說明如下:
@return_variable :乙個
table
型別的變數,用於儲存和累積返回的表中的資料行。
其餘引數與標量型使用者自定義函式相同。
在多宣告錶值型使用者自定義函式的函式體中允許使用下列
transact-sql
語句。賦值語句(
assignment statements
);流程控制語句(
control-of-flow statements
);定義作用範圍在函式內的變數和游標的
declare
語句;select
語句;編輯函式中定義的表變數的
insert
、update
和delete
語句;在函式中允許涉及諸如宣告游標、開啟游標、關閉游標、釋放游標這樣的游標操作,對於讀取游標而言,除非在
fetch
語句中使用
into
從句來對某一變數賦值,否則不允許在函式中使用
fetch
語句來向客戶端返回資料。此外不確定性函式(
non-deterministic functions
)不能在使用者自定義函式中使用。所謂不確定性函式是指那些使用相同的呼叫引數在不同時刻呼叫得到的返回值不同的函式。這些函式如表
13-3
所示(全域性變數也可以視為一種函式)。
Spark之使用者自定義 聚合 函式
packagecom.lyzx.reviewday30 importorg.apache.spark.sql.types.importorg.apache.spark.sql.importorg.apache.spark.classt1 resultdf.write.parquet person 讀...
SQL 使用者自定義函式
使用者自定義函式是 sql server 的資料庫物件,它不能用於執行一系列改變資料庫狀態的操作,但它可以像系統函式一樣在查詢或儲存過程等的程式段中使用,也可以像儲存過程一樣通過 execute 命令來執行。使用者自定義函式中儲存了乙個 transact sql 例程,可以返回一定的值。在sql s...
SQL 使用者自定義函式
使用者自定義函式是 sqlserver 的資料庫物件,它不能用於執行一系列改變資料庫狀態的操作,但它可以像系統函式一樣在查詢或儲存過程等的程式段中使用,也可以像儲存過程一樣通過 execute 命令來執行。使用者自定義函式中儲存了乙個 transact sql 例程,可以返回一定的值。在sqlser...