declare @ScosAdd  varchar(100),
@SQLScos        varchar(1000)
declare @tbScosAdd      table( Scos varchar(20))
select @ScosAdd='1&2&3&4&5'
set @SQLScos='insert @tbScosAdd(scos)  select '''+replace(@ScosAdd,'&',''' union select ''')+''''
exec (@SQLScos)错误信息:
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@tbScosAdd'。

解决方案 »

  1.   

    创建临时表用 Create Table #Tablename (....)
      

  2.   


    --exec和上面的sql作用域不一樣
    declare @ScosAdd varchar(100), 
    @SQLScos        varchar(1000) 
    declare  @tbScosAdd      table( Scos varchar(20)) 
    select @ScosAdd='1&2&3&4&5' 
    set @SQLScos=' select '''+replace(@ScosAdd,'&',''' union select ''')+'''' 
    insert @tbScosAdd(scos) exec (@SQLScos) 
      

  3.   

    楼上的语句不行呀,报错:
    服务器: 消息 197,级别 15,状态 1,行 7
    无法在向表插入变量时将 EXECUTE 用作源。
      

  4.   

    你是在函數裏面用的嗎??-------------------函数中不能使用exec(execute),不能使用临时表
      

  5.   

    我在sqlserver2005中這樣執行時沒有問題的,你實在不行就把表變數換成臨時表:@tbScosAdd =>#tbScosAdd declare @ScosAdd varchar(100), 
    @SQLScos        varchar(1000) 
    declare  @tbScosAdd      table( Scos varchar(20)) 
    select @ScosAdd='1&2&3&4&5' 
    set @SQLScos=' select '''+replace(@ScosAdd,'&',''' union select ''')+'''' 
    insert @tbScosAdd(scos) exec (@SQLScos) select * from @tbScosAdd/*
    (5 個資料列受到影響)
    Scos
    --------------------
    1
    2
    3
    4
    5(5 個資料列受到影響)
    */
      

  6.   

     CREATE   PROCEDURE   p_select     
      AS   
      declare   @tbtmp   TABLE   
      ( [name]   [varchar]   (10)   NOT   NULL   ,   
      [date]   [datetime]     
      )   
      insert   into   @tbtmp   (name,date)   SELECT   table1.name,table1.date   FROM   table1
      select   *   from   @tbtmp     
      GO   
    参考