1
SELECT INTO是否在运行时之前在TempDB中保留#Object名称?
汇集了一个快速处理程序以帮助调试,我遇到了编译器中似乎是错误的错误。 create proc spFoo @param bit as begin if @param = 0 begin select * into #bar from [master].dbo.spt_values -- where number between ... end else begin select top 10 * into #bar from [master].dbo.spt_values order by newid(); end; end; 尝试执行上述操作会返回以下错误 消息2714,级别16,状态1,过程spFoo,第19 行在数据库中已经有一个名为“ #bar”的对象。 在人类可读的意义上,该proc似乎很好:select into因为它们被包装在if-else块中,所以仅将执行一条语句。但是,非常好,SQL Server无法确认这些语句在逻辑上相互排斥。也许更令人困惑的是,将drop table #fooif放置在if-else块内时(如果假定它将告诉编译器取消分配对象名),错误仍然存在,如下所示。 create …