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

FLI*_*KER 2 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 
Run Code Online (Sandbox Code Playgroud)

当我试图运行脚本时,我得到了

There is already an object named '#uDims' in the database.
Run Code Online (Sandbox Code Playgroud)

在第二和第三"选择进入......"

这显然是一个编译时错误.如果我逐节运行脚本,那么每件事都会运行良好.

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

squ*_*man 5

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

根据文档(在备注部分),

如果在单个存储过程或批处理中创建了多个临时表,则它们必须具有不同的名称.

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