Sqlserver中存储过程,触发器,自定义函数:(二)

来源:互联网 发布:python微信抢红包 编辑:程序博客网 时间:2024/05/16 00:55

Sqlserver中存储过程,触发器,自定义函数:

自定义函数:
1.函数类型;
2.函数的参数和返回值;

1.函数类型:
标量值函数,返回的是一个标量值
表值函数:
内联表值函数;
多语句表值函数。

标量值函数:

[sql] view plaincopyprint?
  1. eg1:创建一个统计某雇员订单总数的函数
  2. create function SumOrders(@职工号varchar(20))--指定参数名,和返回类型
  3. returns int--指定返回类型
  4. begin
  5. declare @订单总数 int
  6. select @订单总数=count(订单.订单号)from
  7. 订单 join 职工 on 订单.职工号=职工.职工号
  8. where 职工.职工号=@职工号
  9. return @订单总数
  10. end
  11. select dbo.SumOrders('E4')

eg2:创建内联表值函数

[sql] view plaincopyprint?
  1. create function SelectOrdersByTime(@起始时间 datetime,@终止时间 datetime)
  2. returns table
  3. return select *from 订单where
  4. 订单日期 between @起始时间 and @终止时间
  5. select * from SelectOrdersByTime('2003-01-01','2003-07-01')
eg3:创建多语句表值函数
[sql] view plaincopyprint?
  1. create function MingDan()--无参函数
  2. returns @名单 table
  3. (
  4. 编号 int identity(1,1) notnull,
  5. 姓名 nvarchar(10) not null
  6. )
  7. begin
  8. insert @名单
  9. select 供应商编号,姓名 from 供应商
  10. insert @名单
  11. select 职工编号,姓名 from 职工
  12. return
  13. end
  14. select * from MingDan()
eg4:自定义函数生成默认值:
[sql] view plaincopyprint?
  1. create function Default_Num()
  2. returns varchar(7)
  3. begin
  4. declare @编号 varchar(7)
  5. declare @id int
  6. select top 1 @编号=编号
  7. from test
  8. order by 编号desc
  9. if @@rowcount=0
  10. set @编号='TCP_001'
  11. else
  12. begin
  13. set @id=cast(substring(@编号,5,3)asint) + 1
  14. set @编号='TCP_' + replicate('0',3-len(@id)) +cast(@idasvarchar(3))
  15. end
  16. return @编号
  17. end
  18. select dbo.Default_Num()
  19. create table test
  20. (
  21. id int identity(1,1) notnullprimarykey,
  22. 编号 varchar(7) default dbo.Default_Num(),
  23. 名称 varchar(3)
  24. )
  25. insert test(名称) values('001')

原创粉丝点击