我有一个字符串.如:
declare @sqlstring nvarchar(200)
set @sqlstring='2;1,2,7'我要输出这样的字符串.set @sqlout='select 2,1 union all select 2,2 union all select 2,7 '也就是我要根据已知道的字符串,拼出一个sql. 不用循环不知道是否可以实现这个需求..
就是把后面的和前面组织起来.注意: 前面最多就一个字符.不会有多余的.后面的数字不固定....

解决方案 »

  1.   

    if object_id('dbo.fn_split')is not null drop function dbo.fn_split
    go
    create function dbo.fn_split 

    @inputstr varchar(8000), 
    @seprator varchar(10) 

    returns @temp table (a varchar(200)) 
    as begin 
    declare @i int set @inputstr = rtrim(ltrim(@inputstr)) 
    set @i = charindex(@seprator, @inputstr) while @i >= 1 
    begin 
    insert @temp values(left(@inputstr, @i - 1)) set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i) 
    set @i = charindex(@seprator, @inputstr) 
    end if @inputstr <> '\' 
    insert @temp values(@inputstr) return 
    end 
    go --调用 
    declare @s varchar(1000) 
    declare @str varchar(1000)
    set @s='2;1,2,7' 
    select @str=right(@s,len(@s)-charindex(';',@s))
    select left(@s,charindex(';',@s)-1)col,* from dbo.fn_split(@str,',') 
    /*col                                                                                                                                                                                                      a                                                                                                                                                                                                        
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
    2                                                                                                                                                                                                        1
    2                                                                                                                                                                                                        2
    2                                                                                                                                                                                                        7(影響 3 個資料列)*/
      

  2.   

    declare @sqlstring nvarchar(200)
    set @sqlstring='2;1,2,7' declare @firstfield varchar(2)
    set @firstfield=left(@sqlstring,1)set @sqlstring=substring(@sqlstring, charindex(';',@sqlstring)+1, len(@sqlstring))set @sqlstring='select '+@firstfield+','+replace(@sqlstring,',',' union all select '+@firstfield+',')print @sqlstring
    /*
    select 2,1 union all select 2,2 union all select 2,7
    */
      

  3.   

    '2;1,2,7' 到'select 2,1 union all select 2,2 union all select 2,7 ' 規則是什麽?
    若固定為兩列數據,以逗號(,)分隔應該是:
    2,1
    2,NULL
    7,NULL怎麽弄出來
    2,1
    2,2
    2,7
    這個數據的?
      

  4.   


    declare @sqlstring nvarchar(200)
    declare @sqlout nvarchar(200)
    set @sqlstring='2;1,2,7'
    set @sqlout=@sqlstring
    declare @str varchar(1000)
    set @str=left(@sqlout,charindex(';',@sqlout)-1)
    print @str
    print @sqlout
    set @sqlout=stuff(@sqlout,1,len(@str),'')
    print @sqlout
    set @sqlout= replace(@sqlout,',',' union all select '+@str+',')
    print @sqlout
    set @sqlout= replace(@sqlout,';','select '+@str+',')
    print @sqlout
      

  5.   

    乱了乱了,declare @sqlout nvarchar(2000)
    declare @str varchar(10)
    这样能好些