数据库中已经有一个名为“#xxxx”的对象

时间:2016-03-08 18:37:29

标签: sql-server ssms temp-tables

我在一个脚本中多次删除/创建一个临时表

IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims

select * into #uDims from table1

.... do something else 

IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims

select * into #uDims from table2 -- >> I get error here

.... do something else 

IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims

select * into #uDims from table3  -- >> and here

.... do something else 

尝试运行脚本时,我得到了

There is already an object named '#uDims' in the database.

在第二和第三个“选择进入...”

这显然是编译时错误。如果我逐节运行脚本,那么每件事都能正常运行。

这个问题有很多解决方法,但我想知道为什么SSMS对此感到不安。

2 个答案:

答案 0 :(得分:5)

您无法在存储过程中多次创建相同的临时表。

根据documentation(在备注部分),

  

如果在单个存储中创建了多个临时表   程序或批次,它们必须有不同的名称。

因此,您必须使用不同的临时表名称,或者必须在存储过程之外执行此操作并使用GO

答案 1 :(得分:0)

Ivan Starostin是对的。我测试了我的SQL这个TSQL,它工作正常。

IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims
select top 10 *  into #uDims from tblS
go 
IF OBJECT_ID('tempdb..#uDims') IS NOT NULL
DROP TABLE #uDims
select top 10 * into #uDims from Waters

没有去,我得到了和你一样的错误(FLICKER)。