TSQL从动态SQL写入临时表

Jef*_*eff 7 t-sql sql-server session temp-tables

请考虑以下代码:

SET @SQL1 = 'SELECT * INTO #temp WHERE ...'
exec(@SQL1)
SELECT * from #temp  (this line throws an error that #temp doesn't exist)
Run Code Online (Sandbox Code Playgroud)

显然这是因为exec命令会旋转一个单独的会话,而#temp是该会话的本地会话.我可以使用全局临时表## temp,但是我必须提出一个命名方案来避免冲突.你们都推荐什么?

boj*_*boj 6

您是否尝试明确创建模板表?

Create Table #temp (..)
Run Code Online (Sandbox Code Playgroud)

  • 这确实解决了范围界定问题.但是因为在执行exec语句之前我不知道模式.(除非有一种方法可以在不定义模式的情况下创建表?) (4认同)

小智 5

尝试## temp因为您的动态查询是在其他光纤上执行的,所以您无法看到其本地临时表.相反,如果你宣布你的临时表像全球,它会产生一种感觉.


Jef*_*eff 2

没有找到一个可行的解决方案来完成我需要的一切,所以我转而使用 ##global 临时表。

  • 这可能会在多用户环境中引起问题 (10认同)