我尝试从另一个#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)
然后它工作正常。这两种说法有什么不同。第一个查询抛出错误和第二个查询成功运行的原因是什么。
答案 0 :(得分:3)
编辑之后的区别在于,当作用域退出并且父作用域不可见时,在子作用域中创建的本地#temp
表将自动删除。 ##
前缀表是全局临时表,并且在作用域退出时不会自动删除。相反,当关闭创建连接并且当前没有其他连接正在访问它时,它们将被删除。
无论如何都没有明确要求在此使用EXEC
,因此您可以使用最初发布的代码来避免此问题。
SELECT Work_Order_No,
ServiceCode,
StageNo,
ItemWeight,
StagePercentage,
FebLocation
INTO #TempMaster
FROM #Temp
答案 1 :(得分: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
答案 2 :(得分: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)
答案 3 :(得分:0)
如果在动态查询中创建#temp表,它只在该动态查询中有效,并且在动态查询完成执行后不能再使用它。
如果你真的需要动态填充你的表 - 你应该预先创建它。