SQL之使用者自定義函式

2022-04-23 14:15:24 字數 3738 閱讀 6024

使用者自定義函式(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...