临时表解析-SQL错误-需要说明

时间:2020-02-05 00:49:41

标签: sql sql-server temp-tables

我有以下无法执行的代码。我不是在寻找解决方法。我想了解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)

2 个答案:

答案 0 :(得分:0)

ui/scripts.js

答案 1 :(得分:0)

我建议对临时表使用不同的名称。

至少在确实需要在IFELSE中创建临时表的情况下。

或仅在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