自定义函数:根据自己的需要,自定义一些函数 自定义函数分为三类:
- 标量函数:对单一值的操作,返回单一值,用begin end包括起来
- 内嵌表值函数:是一种参数化的视图,返回一个表,没有begin end包括起来
- 多声明表值函数:返回的也是一个表,用begin end包括函数体,是标量函数和内嵌表值函数的结合体
--标量函数:返回唯一值 用于查询create function [dbo].GetUserAge(@UserId int)--create function [dbo].GetUserAge(@UserId int=2) --参数中设置默认值returns int--with encryption 用于函数加密asbegindeclare @age intselect @age=Age from UserInfos where UserId = @UserIdreturn @ageendgo--函数调用select dbo.GetUserAge(3) as 年龄select dbo.GetUserAge(default) as 年龄 --调用的时候用default--注意点:--1.创建标量函数的时候,如果指定了所有者,调用的时候也必须指定函数所有者--2.调用时,如果函数中指定了默认值,调用时参数用default替代,如果函数中没有默认值,调用时使用default则返回null--3.语法上:returns 返回值类型 return 表达式/值--4.begin end 中间不能有修改数据的操作
--内嵌表值函数create function [dbo].GetUserInfo(@userId int)returns tableasreturn(select UserId,UserName,Age,DeptId from UserInfoswhere UserId=@userid)go--调用函数select * from dbo.GetUserInfo(27)注意点:1.returns table --只能跟table2.as 后面没有begin end 只能是return select(select语句)
--多语句表值函数create function [dbo].SearchUsers(@uName varchar(50))returns @users table(Id int not null primary key,name varchar(50) not null,age int null)asbegin--函数体insert into @users(Id,name,age)select UserId,UserName,Age from UserInfoswhere UserName like '%'+@uName+'%'return --后面什么也不跟endgo--调用select * from dbo.SearchUsers('lqq')注意点:1.创建标量函数的时候,如果指定了所有者,调用的时候也必须指定函数所有者2.return --后面什么也不跟3.函数一般用作查询使用,不能用于数据修改4.如果用内嵌表值函数能满足需求,就不要使用多语句表值函数
