sql 分割字符串,循環插入

創建自定義标量函数,分割字符串獲取字符串總個數

create function [dbo].[Get_StrArrayLength]
(
  @str varchar(5000),  --要分割的字符串
  @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(5000),  --要分割的字符串
  @split varchar(10),  --分隔符號
  @index int           --取第幾個元素
)
returns varchar(5000)
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 
  return substring(@str,@start,@location-@start)
end

字符串:14,+86,13543040626,123||12,+853,12345678,123

CREATE PROCEDURE [dbo].[app_insert_AccountSmsPhone]

@SmsPhone nvarchar(100)
AS
BEGIN
    BEGIN TRAN 
    declare @num int
    declare @smsAccess varchar(50) 
    declare @smsType varchar(10) 
    declare @smsMobile varchar(50) 
    declare @smsRemark varchar(200) 

    set @num =0
    while(@num<dbo.Get_StrArrayLength(@SmsPhone,'||'))
    begin 
        set @num = @num+1
        SET @smsAccess = dbo.Get_StrArrayStrOfIndex( dbo.Get_StrArrayStrOfIndex(@SmsPhone,'||',@num),',',1)
        SET @smsType =dbo.Get_StrArrayStrOfIndex( dbo.Get_StrArrayStrOfIndex(@SmsPhone,'||',@num),',',2 )
        SET @smsMobile =dbo.Get_StrArrayStrOfIndex( dbo.Get_StrArrayStrOfIndex(@SmsPhone,'||',@num),',',3)
        SET @smsRemark =dbo.Get_StrArrayStrOfIndex( dbo.Get_StrArrayStrOfIndex(@SmsPhone,'||',@num),',',4)
        INSERT INTO account_sms (accountID, smsType, smsMobile, smsAccess, smsRemark) VALUES (@accountID,@smsType,@smsMobile,@smsAccess,@smsRemark)
        if(@@error<>0) begin
            rollback tran
            select 0
            return  
        end
    end
    COMMIT TRAN
    select 1 as count
END
GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值