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

本文详细介绍了 SQL Server 中的自定义函数,包括标量函数与表函数的类型、参数和返回值,并通过实例展示了如何创建和使用这些函数。

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

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

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

标量值函数:

  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')
   eg1:创建一个统计某雇员订单总数的函数
    create function SumOrders(@职工号 varchar(20))--指定参数名,和返回类型
     returns int--指定返回类型
     begin
      declare @订单总数 int
      select @订单总数=count(订单.订单号) from
       订单 join 职工 on 订单.职工号=职工.职工号
       where 职工.职工号=@职工号
      return @订单总数
     end
    
     select dbo.SumOrders('E4')

eg2:创建内联表值函数

  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')
    create function SelectOrdersByTime(@起始时间 datetime,@终止时间 datetime)
    returns table
    return select * from 订单 where
     订单日期 between @起始时间 and @终止时间
    select * from SelectOrdersByTime('2003-01-01','2003-07-01')
eg3:创建多语句表值函数
  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()
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:自定义函数生成默认值:
  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')

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值