declare  @ProductVarious varchar(4000) 
  declare  @dd varchar(4000)
  declare  @sql varchar(4000)
  DECLARE @t TABLE(ID varchar(20) )
 declare  @c  int
BEGIN
   
   set @sql='select id from @t'
   
   
   insert into @t  SELECT PROD_ID FROM tableA
   
  insert into tableB exec(@sql)
END
最後一步出現錯誤:Must declare the table variable "@t".
求解答

解决方案 »

  1.   

    exec内外部的语句编译不在同一空间的, 你在外部声明一个表变量,在exec执行体内部空间是不存在的.
      

  2.   

    declare  @ProductVarious varchar(4000) 
    declare  @dd varchar(4000)
    declare  @sql varchar(4000)
    DECLARE  @t TABLE(ID varchar(20) )
    declare  @c  int
    BEGIN
    --set @sql='select id from @t'
    insert into @t  SELECT PROD_ID FROM tableA
    insert into tableB SELECT ID FROM @T
    END
      

  3.   

    可是我現在需要insert into tableB exec(@sql) 這種方式阿,因爲sql語句是動態生成的阿,裏面含有變量,這樣該怎麽辦呢
      

  4.   

    DECLARE @t TABLE(ID varchar(20) )
    改为 CREATE TABLE #t(ID VARCHAR(20))
    后面将对@t的操作改为操作#t
      

  5.   

    感謝fcuandy,但是假如我想@sql中含有其它變量呢,比如字符竄,數字等等,因爲我想要結合不同的查詢條件動態組合SQL語句。有沒有什麽辦法?
      

  6.   

    create table #t(id int,strname varchar(20))
    insert into #t values (1,'kaishi')
    declare  @name varchar(20)
    declare  @sql varchar(2000)
    set @name='kai'   set @sql='select id from #t where strname like ''%'+@name+'%'''
       
       print @sql
      
       
      insert into tableB exec(@sql)
      

  7.   

    如果是其它类型的变量,可以使用sp_executesql来处理