SQL exec 语句后的对象名称无效

SQL Invalid object name after exec statement

这是代码

declare @test nvarchar(1000)

set @test = 'select * into #temp from mytable'

execute sp_executesql @test

select * from #temp

然后 returns: 对象名称“#temp”无效。

我试图从 mytable 创建临时 table temp。但是,似乎 #temp 不是在 execute 之后创建的。但是如果我取出 into #temp,它确实有效。

本地临时 table (#tmp) 仅在当前会话中可用,这意味着 sp_executesql 在另一个会话中执行。要访问 temp tables,您应该使用两个 # (##tmp) 定义全局临时 table,然后您的代码将以这种方式工作:

declare @test nvarchar(1000)

set @test = 'select * into ##temp from mytable'

execute sp_executesql @test

select * from ##temp