我有以下代码。
If OBJECT_ID('tempdb.dbo.#tempTable', 'U') is not null
drop table #tempTable;
select 'bacon' into #tempTable
select * from #tempTable
If OBJECT_ID('tempdb.dbo.#tempTable', 'U') is not null
drop table #tempTable;
select 'sandwich' into #tempTable
select * from #tempTable
这是我阅读我编写的代码的方式,但我认为SSMS的阅读方式不同,因为我收到错误消息:
Msg 2714,Level 16,State 1,Line 11已经有一个名为的对象 '#不是Temptable'在数据库中。
我觉得If Object_ID部分可能会被提升到代码顶部,或者执行顺序。该表不会在第二个drop table语句中被删除。我当然可以使用不同的临时表作为解决方法,但我想理解为什么这个例子不起作用。
答案 0 :(得分:1)
我的假设是它认为临时表仍然是批处理的一部分。
If OBJECT_ID('tempdb.dbo.#tempTable', 'U') is not null
drop table #tempTable;
select 'bacon' into #tempTable
select * from #tempTable
If OBJECT_ID('tempdb.dbo.#tempTable', 'U') is not null
drop table #tempTable;
GO --At least this should do the trick
select 'sandwich' into #tempTable
select * from #tempTable
另请注意,如果您在带变量的存储过程中使用此变量,则在GO
之后变量将不再存在。