如果我运行此动态查询:
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)
一切都好.创建临时表并填充结果.
为什么它不能用于动态查询执行?
范围!
临时表仅存在于动态执行查询的范围内如果确实要将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.
也许你的问题是尝试动态方法或与你的问题无关.尝试发布一个新问题,你得到了什么,以及你需要做些什么来获得进一步的帮助.
归档时间: |
|
查看次数: |
1039 次 |
最近记录: |