sql中实现数组循环执行 很好用的

 

第一步

   创建函数 取得数组长度

    

create  function [dbo].[get_strarraylength]
(
 @str varchar(1024),  --要分割的字符串
 @split varchar(10)  --分隔符号
)
returns int
as
begin
 declare @location int
 declare @start int
 declare @length int

 set @str=ltrim(rtrim(@str))
 set @location=charindex(@split,@str)
 set @length=1
 while @location<>0
 begin
   set @start=@location+1
   set @location=charindex(@split,@str,@start)
   set @length=@length+1
 end
 return @length
end

第二步

  

create   function [dbo].[get_strarraystrofindex]
(
 @str varchar(1024),  --要分割的字符串
 @split varchar(10),  --分隔符号
 @index int --取第几个元素
)
returns varchar(1024)
as
begin
 declare @location int
 declare @start int
 declare @next int
 declare @seed int

 set @str=ltrim(rtrim(@str))
 set @start=1
 set @next=1
 set @seed=len(@split)
 
 set @location=charindex(@split,@str)
 while @location<>0 and @index>@next
 begin
   set @start=@location+@seed
   set @location=charindex(@split,@str,@start)
   set @next=@next+1
 end
 if @location =0 select @location =len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
 
 return substring(@str,@start,@location-@start)
end

ok 了  建好上面的两个函数

下面就可以应用了  

以下新增了事务处理判断;

 create  PROCEDURE [dbo].[insertOrder]
    @vipOrderIds VARCHAR(8000),--传入字符串 如 order10001,order10002,order10003
 @errorCode varchar(10) out,
 @errorMsg varchar(100) out
AS
BEGIN
declare @errorNum int;
declare @next int ;

decare @vipOrderId varchar(20);
set @errorNum=0
set @next=1
Begin TransAction
while @next<=dbo.get_strarraylength(@vipOrderIds,',')
begin

 set @vipOrderId=dbo.get_strarraystrofindex(@vipOrderIds,',',@next)
 print @vipOrderId
  If @reterror='000'
   begin
    print('写入成功!')
   end
  Else
   Begin
    print('订单已存在!')
    set @errorNum=@errorNum+1
   End 
 set @next=@next+1
end

 if @errorNum=0
 begin
    print('插入主表')
       Commit TransAction    --提交事务
 end
 else
   begin
   print('事务回滚!')
   rollback TransAction  --事务回滚
   end
print @errorMsg
END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值