sqlserver自定義函數
阿新 • • 發佈:2017-07-05
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自定義函數