sqlserver自定义函数

标量函数

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

 

posted @ 2017-07-04 23:20  【可乐不加冰】  阅读(818)  评论(0编辑  收藏  举报