比如参数(字符类型)的内容是   2.01,2.03,2.07
以前试过把这个查询语句放在字符串中,然后exec 这个字符串。但是我存储过程不是单纯的select 语句,而且超8000字符。使用的是SQL2005,2005有没有新方法解决?其实我也想到一个方法,就是把这个字符串按逗号分隔,然后把2.01,2.03,2.07插入到只有一个列的临时表中。就可以in select 这个临时表了。有没有快速的方法把2.01,2.03,2.07插入到临时表?

解决方案 »

  1.   

    where '2.01,2.03,2.07' like ''%'+列名称+'%''
      

  2.   

    declare @in varchar(100)
    set @in = ',2.01,2.03,2.07,'select * from tb where charindex(','+colname+',', @in) > 0
    -- or
    select * from tb where @in like '%,'+colname+',%'
      

  3.   

    INSERT INTO tmp(col) 
    SELECT cast(b.v as numeric(12,2)) FROM
        (SELECT CAST('<r>' + REPLACE(@s,',','</r><r>') + '</r>' AS XML) x) a 
    CROSS APPLY
        (SELECT v=t.x.value('.','VARCHAR(10)') FROM a.x.nodes('//r') AS t(x) ) b 
      

  4.   

    试试一下这段代码,把 print 换成插入语句就可以了
    declare @str varchar(8000),@start int,@end int
    set @str = 2.01,2.03,2.07,'  --如果输入串不是以分割字符结尾,则 set @str = @str+‘,’
    set @start = 1
    set @end = charindex(',',@str,@start)  --第一次出现分割字符的下标位置
    while(@end<>0)
        begin
            print substring(@str,@start,@end-@start)  --输出成员;(@end-@start)的值等于成员的长度,不包含分割字符。
            set @start = @end+1
            set @end = charindex(',',@str,@start)  --输出最后一个成员后,@end =0,则退出循环。
        end 
      

  5.   

    试试一下这段代码,把 print 换成插入语句就可以了declare @str varchar(8000),@start int,@end int
    set @str = '2.01,2.03,2.07,'  --如果输入串不是以分割字符结尾,则 set @str = @str+‘,’
    set @start = 1
    set @end = charindex(',',@str,@start)  --第一次出现分割字符的下标位置
    while(@end<>0)
        begin
            print substring(@str,@start,@end-@start)  --输出成员;(@end-@start)的值等于成员的长度,不包含分割字符。
            set @start = @end+1
            set @end = charindex(',',@str,@start)  --输出最后一个成员后,@end =0,则退出循环。
        end 
      

  6.   

    但是我存储过程不是单纯的select 语句,而且超8000字符
    使用的是SQL2005,2005有没有新方法解决?----------
    8000字符如果是變量改為varchar(max)--Transact-SQL 預存程序的大小上限是 128 MB
      

  7.   

    DECLARE @s NVARCHAR(max)
    SET @s=''
    SELECT 
    TOP 8000 @s=@s+','+RTRIM(a.ID)
    FROM syscolumns a,syscolumns b 
    SET @s=STUFF(@s,1,1,'')SELECT LEN(@s)--測試字符66776
    -----------以上為生成測試變量CREATE TABLE #臨時表(ID int)SET @s='insert #臨時表 select '+REPLACE(@s,',',' union all select ')
    EXEC(@s)SELECT * FROM #臨時表
      

  8.   

    貌似不好处理  varchar 也最多是8K  你这个单独一个参数就超过8k的话 不太好处理吧
      

  9.   

    既然是05 字符长度又够长 
    那就要使用 varchar(max)
      

  10.   


    set @in = '2.01,2.03,2.07'会把01,03,07的都查出来了