declare  @k int ,   @savevalue  varchar(20)
set @serial=0
set @k = charindex(',',@keye)
    while @k>=1
begin
set @savevalue=left(@keye,@k-1)  
set @keye=substring(@keye, @k + 1, len(@keye) - @k)
set @k = charindex(',', @keye)

    ...........处理代码 
 
    end上面是我对逗号代码的拆分处理,我觉得这种方法有些不方便,经统计处理代码多数是INSERT INTO  向数据库表插入数据或UPDATE 更新数据 ,我想问有没有更简单更有效率的代码,最好是哪种一两条语句就完成的方法。 

解决方案 »

  1.   

    declare @s varchar(100)
    set @s='1,2,3,4,a,b,d'
    select substring(@s,number,charindex(',',@s+',',number)-number)as col
    from master..spt_values
    where type='p' and number<=len(@s+'a') and charindex(',',','+@s,number)=number
    /*
    col
    --------------------------------------------------------------------
    1
    2
    3
    4
    a
    b
    d(7 個資料列受到影響)
    */
      

  2.   

    declare @s varchar(100)
    declare @SQL Nvarchar(1000)
    set @s='1,2,3,4,a,b,d'
    SET @SQL='SELECT COL='''+REPLACE(@S,',',''' '+CHAR(10)+CHAR(13)+'UNION ALL SELECT ''')+''''PRINT @SQL
    /*
    SELECT COL='1' 
    UNION ALL SELECT '2' 
    UNION ALL SELECT '3' 
    UNION ALL SELECT '4' 
    UNION ALL SELECT 'a' 
    UNION ALL SELECT 'b' 
    UNION ALL SELECT 'd'
    */再用EXEC执行
      

  3.   

    create function FC_SlpitStr(@Str nvarchar(4000),@Split nvarchar(100))
    returns @R table (Col nvarchar(100))
    as
    begin
        declare @StrLen int
        set @StrLen=len(@Str)
        while charindex(@Split,@StrLen)>0
         begin
          insert into @R values(left(@Str,charindex(@Split,@StrLen)-1))
           set @Str=stuff(@Str,1,charindex(@Split,@StrLen),'')
          end
         insert into @R values(@Str)
    return 
    end declare @a nvarchar(4000)
    set @a='1,23,a'
    select dbo.FC_SlpitStr(@a,',')
      

  4.   

    http://topic.csdn.net/u/20090209/08/a945701c-e0d5-40cb-85f2-f4f56ac2999b.html
      

  5.   

    就是没看明白,2楼的方法,如何INSERT INTO 到表中。
      

  6.   

    我看了这个方法,不知是不是我SQl 2000原因
    select  dbo.FC_SlpitStr(@a,',')   
     服务器: 消息 208,级别 16,状态 1,行 3
    对象名 'dbo.FC_SlpitStr' 无效。
    我只好修改为  select * .from  dbo.FC_SlpitStr(@a,',')
    但出来的值 1,23,a
       
      

  7.   

    因为大多数据情况sql字符是这种情况   AA,BB,CC,DD
    INSERT INTO t  (AA,BB,CC,CC)
    VALUES ('AA','BB','CC','DD')   
    而不是一个单字段       
      

  8.   

    就用水娃这个吧
    你把每个函数
    理解之后
    在想想
    当number=1的时候
    为社么行
    当number=2的时候
    为什么不行declare @s varchar(100)
    set @s='1,2,3,4,a,b,d'
    select substring(@s,number,charindex(',',@s+',',number)-number) as col
    from master..spt_values where type='P' and charindex(',',','+@s,number)=numbernumber      col
    ----------- -------------
    1           1
    3           2
    5           3
    7           4
    9           a
    11          b
    13          d
      

  9.   

    我大概能明白主要代码中的意思,但仍有两个问题,
    1、number是系统自带的吗,不需定义与赋值吗
    2、我找出来字符怎么将列数据转为每个字段,INSERT INTO到表中,如果复杂了反而没有我前面有字符拆分快。
      

  10.   

    试了一下,原来number是字段开始还以为是字段
      

  11.   


    1:
    select distinct number from master..spt_values系统表
    2:
    declare @s varchar(100)
    set @s='1,2,3,4,a,b,d'
    select * into # from
    (
    select substring(@s,number,charindex(',',@s+',',number)-number) as col
    from master..spt_values where type='P' and charindex(',',','+@s,number)=number
    ) ttselect * from #
    col
    -------
    1
    2
    3
    4
    a
    b
    d
      

  12.   

    我觉得可能是前面例子中数据问题set @s='sdf,df^2,5^3,8^4,9^d,bbb'让人产生了误解,多数应用还是这种多条多字段数据,即^分割条数 ,分割字段需要的值
      
      

  13.   

    A表
    col1 col2
    我需要向A表加入数据, set @s='sdf,df^2,5^3,8^4,9^d,bbb'
    A表
    col1 col2
    sdf   df
    2      5
    3      8
    就这样。       
      

  14.   

    declare @s varchar(100)
    set @s='sdf,df^2,5^3,8^4,9^d,bbb'
    select * into #1 from
    (
    select substring(@s,number,charindex('^',@s+'^',number)-number) as col
    from master..spt_values where type='P' and charindex('^','^'+@s,number)=number
    ) tt
    select * from #1
    select substring(col,1,charindex(',',col)-1) col1,
    substring(col,charindex(',',col)+1,len(col)-charindex(',',col)) col2 from #1
      

  15.   

    declare @s varchar(100)
    set @s='sdf,df^2,5^3,8^4,9^d,bbb'
    select * into #1 from
    (
    select substring(@s,number,charindex('^',@s+'^',number)-number) as col
    from master..spt_values where type='P' and charindex('^','^'+@s,number)=number
    ) tt
    select * from #1
    select substring(col,1,charindex(',',col)-1) col1,
    substring(col,charindex(',',col)+1,len(col)-charindex(',',col)) col2 from #1col1                                  col2
    ------------                  ------------------
    sdf                                    df
    2                                       5
    3                                      8
    4                                      9
    d                                      bbb
    可以结贴啦
      

  16.   

    如果就col1 col2来说的确完成了,但问题是真实情况中 tbale 字段是肯定是变化的的 即我需要传参col1,col2,col3...... 哪不又回到需要解析的开始了。 
    --函数sql_str  (tabale 名称,tbale 字段 ,数据 )
     
      

  17.   

    看来最终还是要回来 3# 哪种sql字符拼结的情况下
      

  18.   

    那我只能说你的表设计有问题
    期待高手帮你解决吧 
    ------------
    web页特别选择多条记录向后面传参,肯定只能用这种方式,我只是想了解有没有更好的方式处理