2

我尝试从另一个#temp 表创建#temp 表然后它通过错误。

 Set @Query = 'Select Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
    INTO #TempMaster
    FROM #Temp '
EXEC(@Query)

上面的查询抛出错误

Invalid object name '#TempMaster'.

如果我执行这个查询

Set   @Query = 'Select Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
    INTO ##TempMaster
    FROM #Temp '

EXEC(@Query)

然后它工作正常。这两种说法有什么不同。第一个查询抛出错误和第二个查询成功运行的原因是什么。

4

4 回答 4

3

编辑之后的区别在于,#temp在子范围中创建的本地表会在范围退出时自动删除,并且对父范围不可见。##前缀表是全局临时表,在范围退出时不会自动删除。相反,当创建连接关闭并且当前没有其他连接正在访问它时,它们会被删除。

无论如何都没有明显的要求,EXEC因此您可以通过使用您最初发布的代码来避免此问题。

SELECT Work_Order_No,
       ServiceCode,
       StageNo,
       ItemWeight,
       StagePercentage,
       FebLocation
INTO   #TempMaster
FROM   #Temp 
于 2013-06-03T09:22:31.387 回答
1

试试这个——

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = '
IF OBJECT_ID (N''tempdb.dbo.##TempMaster'') IS NOT NULL
   DROP TABLE ##TempMaster

SELECT Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
INTO ##TempMaster
FROM #Temp'

EXEC sys.sp_executesql @SQL
于 2013-06-03T09:24:12.900 回答
0

这样做:

set @Query = 'select Work_Order_No,ServiceCode,StageNo,ItemWeight,StagePercentage,FebLocation 
INTO #TempMaster1
FROM tablename

select * into #t from #TempMaster1

drop table #TempMaster1
drop table #t '

exec (@Query)
于 2013-06-03T09:20:09.913 回答
0

如果您在动态查询中创建#temp 表,则它仅在该动态查询中有效,并且在动态查询完成执行后您不能稍后使用它。

如果您确实需要动态填充表格 - 您应该预先创建它。

于 2013-06-03T09:32:24.177 回答