[英]Create temp table from another temp table in Dynamic Query
我尝试从另一个#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)
然后工作正常。 这两个语句之间有什么不同。 第一个查询引发错误而第二个查询成功运行的原因是什么。
编辑之后,不同之处在于,在子作用域中创建的本地#temp
表在该作用域退出时会自动删除,并且对父作用域不可见。 ##
前缀表是全局临时表,并且在范围退出时不会自动删除。 相反,当创建的连接关闭并且当前没有其他连接访问它们时,它们将被丢弃。
无论如何,这里显然没有使用EXEC
要求,因此您可以通过使用最初发布的代码来避免此问题。
SELECT Work_Order_No,
ServiceCode,
StageNo,
ItemWeight,
StagePercentage,
FebLocation
INTO #TempMaster
FROM #Temp
试试这个-
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
这样做:
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)
如果在动态查询中创建#temp表,则该表仅在该动态查询中有效,并且在动态查询执行完毕后将无法再使用它。
如果您确实需要动态填写表格-您应该先创建表格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.