Sqlserver中存储过程,触发器,自定义函数:
自定义函数:
1.函数类型;
2.函数的参数和返回值;
1.函数类型:
标量值函数,返回的是一个标量值
表值函数:
内联表值函数;
多语句表值函数。
标量值函数:
go
create function SumOrders(@职工号 varchar(20))--指定参数名,和返回类型 stuNo
returns int --指定返回类型
begin
declare @订单总数 int --学生人数sumstudent
select @订单总数=count(订单.订单号) from
订单 join 职工 on 订单.职工号=职工.职工号
where 职工.职工号=@职工号
return @订单总数
end select dbo.SumOrders('E4') go
alter function SumStudent(@stuNo int)--指定参数名,和返回类型 stuNo
returns int --指定返回类型
begin
declare @sumS int --学生人数sumstudent
select @sumS=count(*) from stuInfo
where stuNo>=@stuNo
return @sumS
end
go
select dbo.SumStudent(4) as 总数
--eg2:创建内联表值函数
create function SelectOrdersByTime(@起始时间 datetime,@终止时间 datetime)
returns table
return select * from 订单 where
订单日期 between @起始时间 and @终止时间 go
select * from SelectOrdersByTime('2003-01-01','2003-07-01')
--=======================
go
create function SelectinfoByTime(@起始时间 int,@终止时间 int)
returns table
return select * from stuInfo where
stuNo between @起始时间 and @终止时间 go
select * from SelectinfoByTime(1,9)
--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
go
select * from MingDan() --eg4:自定义函数生成默认值:
go
create function Default_Num()
returns varchar(7)
begin
declare @编号 varchar(7)
declare @id int
select top 1 @编号=编号 from testorder by 编号 desc
if @@rowcount=0
set @编号='TCP_001'
else
begin
set @id=cast(substring(@编号,5,3)asint) + 1
set @编号='TCP_' + replicate('',3-len(@id)) +cast(@idasvarchar(3))
end
return @编号
end
--eg4:自定义函数生成默认值:
create function Default_Num()
returns varchar(7)
begin
declare @编号 varchar(7)
declare @id int
select top 1 @编号=编号 from testorder by 编号 desc
if @@rowcount=0
set @编号='TCP_001'
else
begin
set @id=cast(substring(@编号,5,3)asint) + 1
set @编号='TCP_' + replicate('',3-len(@id)) +cast(@idasvarchar(3))
end
return @编号
end