在sqlserver中有如下几种自定义函数
标量值函数(返回一个确定类型的值)
标量值一看就想到了数学中的标量(只有大小没有方向)和向量(有大小同时有方向),结果我推测对了,哈哈!
表值函数(以表的形式返回值,相当于参数化的视图)
多声明表值函数(标量函数和内联表值函数结合体,返回值是一个表,和标量型函数一样可以用begin…end)
动手实践:
先搞个表
CREATE TABLE [dbo].[test](
[keyid] [int] IDENTITY(1,1) NOT NULL,
[sort] [varchar](10) NULL,
[qty] [int] NULL,
[aaa] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
放点数据进去
1,标量值函数
create function F_Get(@@CustomKeyID int) --@@CustomKeyID 参数
returns varchar(50) --返回的类型text, 这里是 returns
as
begin
declare @res varchar(50)=''; --申明返回,并初始化
select @res =[sort] from test where [keyid] =@@CustomKeyID --写好sql
return @res;
end
调用
SELECT [dbo].F_Get(5) as [名字]
---调用时候最好写上[dbo],通过数据库对象去调用,不然会报错,找到不这个函数
结果:
2,表值函数
create function F_GetTablea(@keyid int)
returns table --返回table
as
return ( select * from [dbo].[test] where [keyid]=@keyid ) --括弧里面返回一个数据表的查询
select * from dbo.F_GetTablea(5) --调用
结果:
3,多声明表值函数
create function F_gettest(@cuseID int)
returns @cuestable table --字段需要和原表字段名称类型都相同,
(
[keyid] int,
[sort] varchar(10)
)
as
begin
if (@cuseID%2 =0)
begin
insert into @cuestable select [keyid] ,[sort] from [dbo].[test] where [keyid] =1
end
else
begin
insert into @cuestable select [keyid] ,[sort] from [dbo].[test] where [keyid] =6
end
return --这个不能删除,一种语法结构
end
结果
暂时写到这里,欢迎指教!