sql server存储过程使用实例

使用 sql server 存储过程,可以在数据库中实现多种功能,下面就为您介绍其中的一种,供您参考,希望对您学习sql server 存储过程的使用有所帮助。

如果需要同时插入N 条数据 , 不想在程序里控制 , 但是 SQL Sever 又不支持数组参数 . 所以只能用变通的办法了 . 利用 SQL Server 强大的字符串处理传把数组格式化为类似 "1,2,3,4,5,6" ,然后在 sql server 存储过程中用 SubString 配合 CharIndex 把分割开来。

详细的sql server 存储过程:

CREATE PROCEDURE dbo.ProductListUpdateSpecialList  

    @ProductId_Array varChar(800),  

    @ModuleId int  

AS  

    DECLARE @PointerPrev int  

    DECLARE @PointerCurr int  

    DECLARE @TId int  

    Set @PointerPrev=1 

    set @PointerCurr=1 

10        

11      begin transaction  

12      Set NoCount ON  

13      delete  from ProductListSpecial where ModuleId=@ModuleId  

14        

15      Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)  

16      set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,@PointerCurr-@PointerPrev) as int)  

17      Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)  

18      SET @PointerPrev = @PointerCurr  

19      while (@PointerPrev+1 < LEN(@ProductId_Array))  

20      Begin  

21          Set @PointerCurr=CharIndex(',',@ProductId_Array,@PointerPrev+1)  

22          if(@PointerCurr>0)  

23          Begin  

24              set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,@PointerCurr-@PointerPrev-1) as int)  

25              Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)  

26              SET @PointerPrev = @PointerCurr  

27          End  

28          else  

29              Break  

30      End  

31        

32      set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev+1,LEN(@ProductId_Array)-@PointerPrev) as int)  

33      Insert into ProductListSpecial (ModuleId,ProductId) Values(@ModuleId,@TId)  

34      Set NoCount OFF  

35      if @@error=0 

36      begin  

37          commit transaction  

38      end  

39      else  

40      begin  

41          rollback transaction  

42      end  

43  GO  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值