表变量只在当前会话中有效, exec 中是引用不到exec外定义的表变量的

解决方案 »

  1.   

    declare @prd char(6)
    declare @sql varchar(1000) 
    declare @tab varchar(100) set @prd='200807'
    set @tab = 'dbo.kqbrush'+@prd DECLARE  @chuqin TABLE([name] [char] (10),[no] [varchar] (10),[bmno] [char] (10),[bmmc] [char] (20)) set @sql='insert into @chuqin select name,no,bmno,bmmc from '+@tab 
            execute (@sql) 
            select * from @chuqin 
    执行结果是:
    Server: Msg 137, Level 15, State 2, Line 1
    Must declare the variable '@chuqin'.(0 row(s) affected)请问还要声明一次吗?如何更改呢?
      

  2.   

    -- 下面这样是可以的(将定义和使用放在同一作用域
    declare @prd char(6) 
    declare @sql varchar(1000) 
    declare @tab varchar(100) set @prd='200807' 
    set @tab = 'dbo.kqbrush'+@prd 
    set @sql='
    DECLARE  @chuqin TABLE([name] [char] (10),[no] [varchar] (10),[bmno] [char] (10),[bmmc] [char] (20)) 
    insert into '+ @chuqin +' select name,no,bmno,bmmc from '+@tab  + '
            select * from @chuqin 
    '
            execute (@sql) 
      

  3.   

    -- 或者临时表
    declare @prd char(6) 
    declare @sql varchar(1000) 
    declare @tab varchar(100) set @prd='200807' 
    set @tab = 'dbo.kqbrush'+@prd CREATE TABLE #chuqin([name] [char] (10),[no] [varchar] (10),[bmno] [char] (10),[bmmc] [char] (20)) set @sql='insert into #chuqin select name,no,bmno,bmmc from '+@tab 
            execute (@sql) 
            select * from #chuqin 
    DROP TABLE #chuqin