我在一个脚本中多次删除/创建一个临时表
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对此感到不安。
答案 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)。