Sqlserver中存储过程,触发器,自定义函数:
自定义函数:
1.函数类型;
2.函数的参数和返回值;
1.函数类型:
标量值函数,返回的是一个标量值
表值函数:
内联表值函数;
多语句表值函数。
标量值函数:
eg1:创建一个统计某雇员订单总数的函数
create function SumOrders(@职工号 varchar(20))--指定参数名,和返回类型
returns int--指定返回类型
begin
declare @订单总数 int
select @订单总数=count(订单.订单号) from
订单 join 职工 on 订单.职工号=职工.职工号
where 职工.职工号=@职工号
return @订单总数
end
select dbo.SumOrders('E4')
eg2:创建内联表值函数
create function SelectOrdersByTime(@起始时间 datetime,@终止时间 datetime)
returns table
return select * from 订单 where
订单日期 between @起始时间 and @终止时间
select * from SelectOrdersByTime('2003-01-01','2003-07-01')
eg3:创建多语句表值函数
create function MingDan()--无参函数
returns @名单 table
(
编号 int identity(1,1) not null,
姓名 nvarchar(10) not null
)
begin
insert @名单
select 供应商编号,姓名 from 供应商
insert @名单
select 职工编号,姓名 from 职工
return
end
select * from MingDan()
eg4:自定义函数生成默认值:
create function Default_Num()
returns varchar(7)
begin
declare @编号 varchar(7)
declare @id int
select top 1 @编号=编号
from test
order by 编号 desc
if @@rowcount=0
set @编号='TCP_001'
else
begin
set @id=cast(substring(@编号,5,3) as int) + 1
set @编号='TCP_' + replicate('0',3-len(@id)) + cast(@id as varchar(3))
end
return @编号
end
select dbo.Default_Num()
create table test
(
id int identity(1,1) not null primary key,
编号 varchar(7) default dbo.Default_Num(),
名称 varchar(3)
)
insert test(名称) values('001')