sqlserver 多个分隔符分隔的参数如何处理

分隔字符串的function

ALTER function [dbo].[SplitString]
(
    @Input nvarchar(max),
    @Separator nvarchar(max)=',', 
    @RemoveEmptyEntries bit=1 
)
returns @TABLE table 
(
    [Id] int identity(1,1),
    [Value] nvarchar(max)
) 
as
begin 
    declare @Index int, @Entry nvarchar(max)
--返回要分隔的符号在字符串中的起始位置
    set @Index = charindex(@Separator,@Input)

    while (@Index>0)
    begin
--去掉字符串的左右空格,截取第一个字符
        set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1)))

        if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
            begin
                insert into @TABLE([Value]) Values(@Entry)
            end
--删除字符串中的第一个截取的字符
        set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input))
--重新设置index的位置
        set @Index = charindex(@Separator, @Input)
    end
--最后一个字符,去掉左右空格
    set @Entry=ltrim(rtrim(@Input))
    if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
        begin
            insert into @TABLE([Value]) Values(@Entry)
        end

    return
end

DECLARE @val varchar(5000)
declare @rows int
declare @n int
declare @new int    
select @n=1
IF OBJECT_ID('tempdb..#tmp_emp') IS NOT NULL DROP TABLE #tmp_emp
select * into #tmp_emp from SplitString('3,1,''测试点'',0,''2015/06/2'',''2015/06/2'',''22'';1,1,''xx'',''1010'',''9955'',''xx@163.com'',''test'',1,1,''22''
',';',1)
select @rows= COUNT(0) from #tmp_emp
while @n <= @rows
begin

select @val = [value] from #tmp_emp where id=@n

IF OBJECT_ID('tempdb..#tmp_emp2') IS NOT NULL DROP TABLE #tmp_emp2
select * into #tmp_emp2 from SplitString(@val,',',1)
select * from #tmp_emp2

select @new = COUNT(0) from HB_M_Store where StoreCD = (select [VALUE] from #tmp_emp2 where id=1)

if(@new <> 0)
BEGIN

select * from HB_M_Store

insert into HB_M_Store values(3,1,'测试点',(select [VALUE] from #tmp_emp2 where id=1),'2015/06/2','2015/06/2','10108701');



END

--INSERT into HB_M_Store VALUES();



select @n=@n+1
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值