带有临时表创建错误的条件语句

时间:2015-05-18 10:16:24

标签: sql-server

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

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.

2 个答案:

答案 0 :(得分:0)

您应该使用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

答案 1 :(得分:0)

而不是使用select into,只需在条件使用#x之前创建insert into

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');

另一种选择是使用CASE

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
);

案例选项将允许您使用多个不同的选项(您可以根据需要指定子句的数量),并且我还演示了一种仅查询临时表而不是每个if的方法...如果......其他如果...分支。 (当然,你可以用if ...... else做同样的事情)