1. 程式人生 > >sqlserver自定義函數

sqlserver自定義函數

ssi sch 及其 insert 語句 關鍵字 sql varchar join

標量函數

RETURNS 子句指定一種標量數據類型,則函數為標量值函數。

語法

Create function 函數名(參數)
Returns 返回值數據類型
[with {Encryption | Schemabinding }]
[as]
begin
SQL語句(必須有return 變量或值)
End

釋義:

  • with 子句指出了創建函數的選項,如果指出了 encryption 參數,則創建的函數是被加密的,函數定義的文本將以不可讀的形式存儲在 syscomments 表中,任何人都不能查看該函數的定義,包括函數的創建者和系統管理員。
  • begin 和 end 之間定義了函數題,該函數體中必須包括一條 return語句,用於返回一個值。函數返回 scalar_expression 表達式的值。
  • 用戶定義函數的返回類型,可以是 SQL Server 支持的基本標量類型,但 text 、nterxt 、image 和 timestamp 除外。

列子:

CREATE FUNCTION funcGetResult(@ret int )  --傳入了一個int類型的參數
RETURNS int       --註意這裏返回的是一個數據類型
AS  
BEGIN 
    declare @n int
    set @n = 3
    return @n* @ret
END

表值函數又分為兩種:內嵌表值函數(行內函數)或多語句函數

表值函數:內嵌表值函數

如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數為內嵌表值函數。

語法

create function 函數名(參數)
returns table
[with {Encryption | Schemabinding }]
as
return(
    一條SQL語句
)

釋義:

  • returns table:此句僅包含關鍵字table ,表示此函數返回一個表。
  • with 子句指出了創建函數的選項,如果指出了 encryption 參數,則創建的函數是被加密的,函數定義的文本將以不可讀的形式存儲在 syscomments 表中,任何人都不能查看該函數的定義,包括函數的創建者和系統管理員。
  • return [(select_stmt)]:內嵌表值函數的函數體僅有一個return語句,並通過參數 select_stmt 指定的 select 語句返回內嵌值。

列子:

create function getExams(@written float)
returns table as
return(
    select s.stuno,s.stuname,s.brithday,e.written,e.lab
    from StuInfo s left outer join exam e
    on s.stuno=e.stuno
    where written >= @written
)

表值函數:多語句函數

如果 RETURNS 子句指定的 TABLE 類型帶有列及其數據類型,則該函數是多語句表值函數

語法:

--多句表格值函數
   create function 函數名(參數)
   returns 表格變量名table (表格變量定義)
   [with {Encryption | Schemabinding }]
as
   begin
    SQL語句
   end
--多句表格值函數包含多條SQL語句,至少有一條在表格變量中填上數據值

例子:

create function GetInfo(@name varchar(20))
returns @cTable table(UserName varchar(10),UserPwd varchar(10))
as
begin
  insert into @cTable
  select userName,userPass from userinfo where username=@name
return   --函數中最後一條語句必須是返回語句。
end

--調用 select * from GetInfo(admin) ------------ UserName UserPwd admin amin

sqlserver自定義函數