简单存储过程,报对像名无效
存储过程 
 CREATE   PROC   TEST   
 AS   
 DECLARE   @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   
 是没有问题的,临时表为何不能访问呢?
------解决方案--------------------生命周期
------解决方案--------------------作用域
------解决方案--------------------作用域不同   
 CREATE PROC TEST   
 AS   
 DECLARE @SQL NVARCHAR(4000) 
 SET @SQL= 'SELECT * INTO #TMP FROM 返工表;SELECT * FROM #TMP ' 
 EXEC sp_executesql @SQL 
------解决方案--------------------  我不相信在查询分析器里执行不会报错
------解决方案--------------------  作用域的问题
------解决方案--------------------CREATE PROC TEST   
 AS 
 SSELECT * INTO #TMP FROM 返工表  
 SELECT * FROM #TMP   
 这样就没问题了
------解决方案--------------------#TMP作用域只限于当前查询 而sp_executesql @SQL 和 SELECT * FROM #TMP不属于一次查询所以抱错
------解决方案--------------------作用域的问题     
 CREATE PROC TEST   
 AS   
 DECLARE @SQL NVARCHAR(4000) 
 SET @SQL= 'SELECT * INTO #TMP FROM 返工表 SELECT * FROM #TMP  ' 
 EXEC sp_executesql @SQL 
 go   
 --或者     
 CREATE PROC TEST   
 AS 
 SELECT * INTO #TMP FROM 返工表 where 1=2   
 DECLARE @SQL NVARCHAR(4000) 
 SET @SQL= 'insert INTO #TMP SELECT *  FROM 返工表   ' 
 EXEC sp_executesql @SQL   
 SELECT * FROM #TMP 
 go 
------解决方案--------------------这样改一下就行了   
 alter PROC TEST   
 AS   
 DECLARE @SQL NVARCHAR(4000) 
 SET @SQL= 'SELECT * INTO #TMP FROM gzda select * from #tmp ' 
 EXEC sp_executesql @SQL   
 go    
 exec test
------解决方案--------------------#tmp只在动态sql语句中有效