SQL 使用者自定義函式

2021-08-27 01:16:19 字數 3343 閱讀 7582

使用者自定義函式是

sqlserver

的資料庫物件,它不能用於執行一系列改變資料庫狀態的操作,但它可以像系統函式一樣在查詢或儲存過程等的程式段中使用,也可以像儲存過程一樣通過

execute

命令來執行。使用者自定義函式中儲存了乙個

transact-sql

例程,可以返回一定的值。

在sqlserver

中根據函式返回值形式的不同將使用者自定義函式分為三種型別:

標量型函式

標量型函式返回乙個確定型別的標量值其返回值型別為除

text

、ntext

、image

、cursor

、timestamp

和table

型別外的其它資料型別。函式體語句定義在

begin-end

語句內,其中包含了可以返回值的

transact-sql

命令。

內聯錶值型函式

內聯錶值型函式以表的形式返回乙個返回值,即它返回的是乙個表內聯錶值型函式沒有由

begin-end

語句括起來的函式體。其返回的表由乙個位於

return

子句中的

select

命令段從資料庫中篩選出來。內聯錶值型函式功能相當於乙個引數化的檢視。

語句錶值型函式多語句

錶值型函式可以看作標量型和內聯錶值型函式的結合體。它的返回值是乙個表,但它和標量型函式一樣有乙個用

begin-end

語句括起來的函式體,返回值的表中的資料是由函式體中的語句插入的。由此可見,它可以進行多次查詢,對資料進行多次篩選與合併,彌補了內聯錶值型函式的不足。

sqlserver

為三種型別的使用者自定義函式提供了不同的命令建立格式。 (

1)建立標量型使用者自定義函式(

scalarfunctions

)其語法如下:

各引數說明如下:

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

:加密選項。讓

sqlserver

對系統表中有關

createfunction

的宣告加密,以防止使用者自定義函式作為

sqlserver

複製的一部分被發布(

publish)。

schemabinding

:計畫繫結選項將使用者自定義函式繫結到它所引用的資料庫物件如果指定了此選項,則函式所涉及的資料庫物件從此將不能被刪除或修改,除非函式被刪除或去掉此選項。應注意的是,要繫結的資料庫物件必須與函式在同一資料庫中。

示例:createfunctiondbo.foo()

2)建立內聯錶值型使用者自定義函式(

inlinetable-valuedfunctions)

其語法如下:

各引數說明如下:

table

:指定返回值為乙個表。

select-stmt

:單個select

語句,確定返回的表的資料。

其餘引數與標量型使用者自定義函式相同。

示例:createfunctiondbo.foo()

returntable

asreturnselectid,titlefrommsgs

內嵌錶值函式只有乙個select語句

3)建立多宣告錶值型使用者自定義函式

其語法如下:

各引數說明如下:

@return_variable

:乙個table

型別的變數,用於儲存和累積返回的表中的資料行。

其餘引數與標量型使用者自定義函式相同。

示例:createfunctionfn_findreports(@inempidnchar(5))

returns@retfindreportstable(empidnchar(5)primarykey,

empnamenvarchar(50)notnull,

mgridnchar(5),

titlenvarchar(30))

……

SQL 使用者自定義函式

使用者自定義函式是 sql server 的資料庫物件,它不能用於執行一系列改變資料庫狀態的操作,但它可以像系統函式一樣在查詢或儲存過程等的程式段中使用,也可以像儲存過程一樣通過 execute 命令來執行。使用者自定義函式中儲存了乙個 transact sql 例程,可以返回一定的值。在sql s...

建立使用者自定義函式 SQL

建立使用者自定義函式 標量函式 create function dbo.bmrs bmh as int returns int asbegin declare bmrs int select bmrs count 工號 from 銷售人員 where 部門號 bmh return bmrs endg...

建立使用者自定義函式 SQL

建立使用者自定義函式 標量函式 create function dbo.bmrs bmh as int returns int asbegin declare bmrs int select bmrs count 工號 from 銷售人員 where 部門號 bmh return bmrs endg...