临时表不是从动态查询执行中创建的

Fre*_*kyB 2 t-sql sql-server

如果我运行此动态查询:

declare @test nvarchar(1000) = 'select * into #tmp7 from bauser'
execute(@test)
Run Code Online (Sandbox Code Playgroud)

然后尝试查询#tmp7:

select * from #tmp7
Run Code Online (Sandbox Code Playgroud)

抛出错误:

无效的对象名称'#tmp7'.

但是,如果我手动运行相同的查询:

select * into #tmp7 from bauser
Run Code Online (Sandbox Code Playgroud)

一切都好.创建临时表并填充结果.

为什么它不能用于动态查询执行?

jea*_*ean 5

范围!

临时表仅存在于动态执行查询的范围内如果确实要将select放入动态查询中

declare @test nvarchar(1000) = 'select * into #tmp7 from bauser

select * from #tmp7'
execute(@test)
Run Code Online (Sandbox Code Playgroud)

您也可以使用此方法检查是否存在此类对象

select * from sys.sysobjects so where so.name like '%tmp7%'
Run Code Online (Sandbox Code Playgroud)

看到类似的问题 SQL Server 2005和临时表范围

编辑

临时表是一个表,所以是的,你可以添加列,索引等.这些表实际上驻留在TempDB数据库中,你甚至可以"找到"它们(它们可以看到奇怪的长名称),但是它们在执行你的EXEC.

也许你的问题是尝试动态方法或与你的问题无关.尝试发布一个新问题,你得到了什么,以及你需要做些什么来获得进一步的帮助.