在SQL Server中使用Execute时不知道临时表

时间:2015-03-31 10:59:23

标签: sql sql-server temp-tables

我有以下查询:

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

有效。

我该怎么做?

1 个答案:

答案 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)