存储过程
CREATE PROC TESTASDECLARE @SQL NVARCHAR(4000)
SET @SQL='SELECT * INTO #TMP FROM 返工表 '
EXEC sp_executesql @SQL
SELECT * FROM #TMP
在查询分析器中执行报错:(所影响的行数为 644 行)服务器: 消息 208,级别 16,状态 1,过程 TEST,行 8
对象名 '#TMP' 无效。
存储过程: dx2007.dbo.TEST
 
但我直接在分析器中运行:SET @SQL='SELECT * INTO #TMP FROM 返工表 '
EXEC sp_executesql @SQL
SELECT * FROM #TMP是没有问题的,临时表为何不能访问呢?

解决方案 »

  1.   

    作用域不同CREATE PROC TESTASDECLARE @SQL NVARCHAR(4000)
    SET @SQL='SELECT * INTO #TMP FROM 返工表;SELECT * FROM #TMP'
    EXEC sp_executesql @SQL
      

  2.   

    CREATE PROC TESTAS
    SSELECT * INTO #TMP FROM 返工表 
    SELECT * FROM #TMP这样就没问题了
      

  3.   

    #TMP作用域只限于当前查询 而sp_executesql @SQL 和 SELECT * FROM #TMP不属于一次查询所以抱错
      

  4.   

    作用域的问题
    CREATE PROC TESTASDECLARE @SQL NVARCHAR(4000)
    SET @SQL='SELECT * INTO #TMP FROM 返工表 SELECT * FROM #TMP '
    EXEC sp_executesql @SQL
    go--或者
    CREATE PROC TESTAS
    SELECT * INTO #TMP FROM 返工表 where 1=2DECLARE @SQL NVARCHAR(4000)
    SET @SQL='insert INTO #TMP SELECT *  FROM 返工表  '
    EXEC sp_executesql @SQLSELECT * FROM #TMP
    go
      

  5.   

    这样改一下就行了alter PROC TESTASDECLARE @SQL NVARCHAR(4000)
    SET @SQL='SELECT * INTO #TMP FROM gzda select * from #tmp'
    EXEC sp_executesql @SQLgo exec test