我有以下查询:
if OBJECT_ID('tempdb..#tmpTables') is not null
drop table #tmpTables
Execute('select TABLE_NAME into #tmpTables from '+@dbName+'.INFORMATION_SCHEMA.TABLES')
while (select COUNT(*) from #tmpTables)>0
begin
//here is my statement
end
当我执行此查询时,我收到此错误:
无效的对象名称' #tmpTables'。
但是当查询改为:
if OBJECT_ID('tempdb..#tmpTables') is not null
drop table #tmpTables
select TABLE_NAME into #tmpTables from INFORMATION_SCHEMA.TABLES
while (select COUNT(*) from #tmpTables)>0
begin
//here is my code
end
有效。
我该怎么做?
答案 0 :(得分:0)
带有单个数字符号(#)的表名称是“本地临时表”名称。
本地临时表在与SQL Server实例相同的连接期间仅对其创建者可见,与首次创建或引用表时相同。 用户断开与SQL Server实例的连接后,将删除本地临时表。
当您通过Local Temporary Table
命令创建EXEC()
时,创建者将不会是您,并且在完成语句后它将断开连接,并且在完成连接临时表时丢失。
您可以使用这样的表变量:
DECLARE @tmpTables TABLE(TABLE_NAME nvarchar(max))
insert into @tmpTables
(select TABLE_NAME from INFORMATION_SCHEMA.TABLES)