declare
@s varchar(1000) 
set @s = '1,23,a'
declare
@sql varchar(1000)
declare
@temptb table(IDList varchar(8000))
set @sql = 'select col= '''
    + replace(@s,',','''union all select ''')
    + ''''
print (@sql)
exec (@sql)
这里的结果我如何拿出来用啊

解决方案 »

  1.   

    输出参数 
    declare @num int, @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  2.   

    create table #(col varchar(10))
    declare
    @s varchar(1000) 
    set @s = '1,23,a'
    declare
    @sql varchar(1000)
    declare
    @temptb table(IDList varchar(8000))
    set @sql = 'insert # select col= '''
        + replace(@s,',','''union all select ''')
        + ''''
    print (@sql)exec (@sql)
    select * from #
    /*
    col
    ----------
    1
    23
    a(3 行受影响)
    */
      

  3.   

    declare @s varchar(1000) 
    set @s = '1,23,a'
    declare @sql varchar(1000)
    declare @temptb table(IDList varchar(8000))
    set @sql = 'select col= '''+replace(@s,',','''union all select ''')+''''
    print (@sql)
    insert @temptb exec (@sql)select * from @temptb
    select col= '1'union all select '23'union all select 'a'(3 行受影响)
    IDList
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1
    23
    a(3 行受影响)
      

  4.   

    对动态@sql的结果,
    或者所有应用都放于@sql中处理
    或者通过创建临时表 用insert into ... exec(@sql) 将结果放于临时表中