Sql server 具有临时表创建错误的条件语句

Sql server 具有临时表创建错误的条件语句,sql-server,Sql Server,我一直在绞尽脑汁,但看不出下面的查询有什么问题。 我创建了一个临时表,可以保存两个值中的一个。 其思想是,如果存储了1,它将执行下面代码的第一部分(This),如果是2,它将执行下面的代码(This)。 问题是代码不会运行,因为它“似乎”认为代码的两部分都将被执行。。。我想。有什么想法吗 create table #Globals(G1 smallint); insert into #Globals values (1); --insert into #Globals values (2);

我一直在绞尽脑汁,但看不出下面的查询有什么问题。
我创建了一个临时表,可以保存两个值中的一个。
其思想是,如果存储了
1
,它将执行下面代码的第一部分(
This
),如果是
2
,它将执行下面的代码(
This
)。
问题是代码不会运行,因为它“似乎”认为代码的两部分都将被执行。。。我想。有什么想法吗

create table #Globals(G1 smallint);
insert into #Globals values (1); 
--insert into #Globals values (2); 

if (select G1 from #Globals) = 1
  select 'This' as field1 into #x;
else if (select G1 from #Globals) = 2
  select 'That' as field1 into #x;

Msg 2714, Level 16, State 1, Line 8
There is already an object named '#x' in the database.

对于代码的逻辑流,应使用
EXISTS

if exists (select G1 from #Globals where G1 = 1)
  begin
    select 'This' as field1 into #x;
  end
else if exists (select G1 from #Globals where G1 = 2)
  begin
    select 'That' as field1 into #x;
  end

不要使用
选择插入
,只需在条件使用
插入
之前创建
#x

create table #x (field1 char(4));

if (select G1 from #Globals) = 1
    insert into #x(field1) values('This');
else if (select G1 from #Globals) = 2
    insert into #x(field1) values('That');
另一个选项是使用
案例

create table #x (field1 varchar(7));
declare @g1 int
select @g1 = g1 from #globals

insert into #x(field1) values(
    case when @g1 = 1 then 'this'
         when @g1 = 2 then 'that'
    else
         'default'
    end
);

case选项将允许您使用多个不同的选项(您可以根据需要指定多少when子句),而且我还演示了一种只查询临时表一次的方法,而不是每个if…else if。。。否则如果。。。分支机构。(当然,您也可以对if…else执行相同的操作)

这并不能解决OP的问题,那么我假设该会话中已经创建了临时表。我总是确保temp表的drop表是我代码的最后一行,以确保在测试/运行临时操作时不会出现此错误。除非两个条件都等于true,否则无法创建两次临时表,在这种情况下,问题在于逻辑,而不是流程。我在一个新会话中使用不同的临时表名称(#x987)运行了上述代码,但仍然出现错误(Msg 2714,级别16,状态1,第11行,数据库中已经有一个名为“#x987”的对象。)即使您尝试在第二次插入之前删除临时表,也会得到相同的异常。请尝试使用我的建议。