Sql server SQL Server中的临时表-如果查询需要很长时间才能完成,则会发生错误

Sql server SQL Server中的临时表-如果查询需要很长时间才能完成,则会发生错误,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,请查看下面的查询 select * into TempTable from MainTable select * from TempTable WAITFOR DELAY '00:00:10' drop table TempTable 执行此查询后,我打开其他窗口并执行查询: select * into TempTable from MainTable select * from TempTable drop table TempTable 我得到以下错误: 数据库中已存在名为“

请查看下面的查询

select * 
into TempTable
from MainTable

select * from TempTable
WAITFOR DELAY '00:00:10'

drop table TempTable
执行此查询后,我打开其他窗口并执行查询:

select * 
into TempTable
from MainTable

select * from TempTable

drop table TempTable
我得到以下错误:

数据库中已存在名为“TempBucket”的对象


假设它是存储过程的一部分,并且需要很长时间才能完成。如果再次调用此存储过程,则会发生此错误。如何修复此错误?

我假设您正在使用MSSQL DBMS,并对您的帖子进行标记。 使用真正的临时表:在表名前面加上“#”。 使用此方法,临时表将仅存在于创建它的过程的范围内

select * 
into #TempTable
from MainTable

select * from #TempTable
实际上不必滴,但可能是更好的练习

试试这个-

IF OBJECT_ID (N'tempdb.dbo.#TempTable', 'U') IS NOT NULL
   DROP TABLE #TempTable

SELECT *
INTO #TempTable
FROM dbo.MainTable

SELECT *
FROM #TempTable

您确定第二个查询在第一个查询完成后开始吗?当您插入到“诱惑”中时,它是如何“TempBucket”的?关于基于会话的临时表,请参见@Drew RDevart-I的答案。我只是想知道为什么要包括表存在性测试&drop:)嗯,我认为这是最好的做法。是的。投票支持@Devart answer。这种检查临时表是否存在并在创建临时表之前删除临时表的做法可以在许多情况下防止意外错误。同意。这就是为什么微软在SQLServer2016中提供了DROP IF EXISTS。