繁体   English   中英

从动态查询中的另一个临时表创建临时表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM