我有以下无法执行的代码。我不是在寻找解决方法。我想了解SQL在做什么以及为什么它失败并显示错误:“数据库中已经有一个名为'#t'的对象。”请注意解释。
if object_id('tempdb.dbo.#t') is not null
drop table #t
GO
declare @i int = 0
if @i = 0
create table #t (col1 int)
else
create table #t (col1 int)
答案 0 :(得分:0)
ui/scripts.js
答案 1 :(得分:0)
我建议对临时表使用不同的名称。
至少在确实需要在IF
和ELSE
中创建临时表的情况下。
或仅在IF
之前的开始处拖放一次并创建临时表。
可悲的是,编译器对这种琐碎的事情感到困惑。
解析和评估T-Sql时,它将忽略诸如IF
之类的控制流语句。
因此,在相同的范围内可以看到相同临时表的创建,并将其评估为重复对象问题。
解决方法示例:
declare @i int = 0
if @i = 0
begin
if object_id('tempdb..#t1') is not null
drop table #t1;
create table #t1 (col1 int);
end
else
begin
if object_id('tempdb..#t2') is not null
drop table #t2;
create table #t2 (col1 int, col2 int);
end