Int数组和IN语句

时间:2012-11-22 08:34:35

标签: sql sql-server

如何在SQL Server中声明int数组?

填写之后,我想在IN语句中使用它来检查,我该如何更改我的代码?

declare @mode int =1 
declare @acceptedFormTypeIds table (id int)

case @mode
    when 1 then
        insert into @acceptedFormTypeIds(id) values (1, 2, 3, 4)
    when 2 then 
        insert into @acceptedFormTypeIds(id) values (1, 3)
    when 3 then 
        insert into @acceptedFormTypeIds(id) values (2, 4)
    else
        insert into @acceptedFormTypeIds(id) values (1, 2, 3, 4)
end

...

WHERE
    tFRM.SendDate between @datefrom and @dateto
    and tFRM.TemplateId IN @acceptedFormTypeIds.id

3 个答案:

答案 0 :(得分:8)

在数据库中,不要想到数组。想想集合或表格。

insert语句的结构应为

insert into @acceptedFormTypeIds(id) values (1), (2), (3), (4)

您可以使用if

if @mode=2
begin
   insert into @acceptedFormTypeIds(id) values (1), (3)
end
else
begin
    if @mode=3
    begin
       insert into @acceptedFormTypeIds(id) values (2), (4)
    end
    else
    begin
       insert into @acceptedFormTypeIds(id) values (1), (2), (3), (4)
    end
end

但是,根据您的使用情况,可能值得拥有FormTypeModeAccepted表。

答案 1 :(得分:4)

没有类似开关的语句,case是一个表达式,因此您将使用if

要插入多条记录,请使用values (2), (4)代替values (2, 4)

使用in中的表格时,您需要从中进行选择。

declare @mode int = 1
declare @acceptedFormTypeIds table (id int)

if (@mode = 1) begin
  insert into @acceptedFormTypeIds(id) values (1), (2), (3), (4)
end else if (@mode = 2) begin 
  insert into @acceptedFormTypeIds(id) values (1), (3)
end else if (@mode = 3) begin 
  insert into @acceptedFormTypeIds(id) values (2), (4)
end else begin
  insert into @acceptedFormTypeIds(id) values (1), (2), (3), (4)
end

...    
WHERE
    tFRM.SendDate between @datefrom and @dateto
    and tFRM.TemplateId IN (select id from @acceptedFormTypeIds)

答案 2 :(得分:2)

要切换需要使用IF而不是CASE的语句,还需要将每个值插入其自己的括号中。

e.g。

DECLARE @mode INT = 1;
DECLARE @acceptedFormTypeIds TABLE (id INT);

IF @mode = 1
    INSERT @acceptedFormTypeIds (id) VALUES (1), (2), (3), (4);
ELSE IF @mode = 2
    INSERT @acceptedFormTypeIds (id) VALUES (1), (3);
ELSE IF @mode = 2
    INSERT @acceptedFormTypeIds (id) VALUES (2), (4);
ELSE 
    INSERT @acceptedFormTypeIds (id) VALUES (1), (2), (3), (4);


SELECT  *
FROM    @acceptedFormTypeIds;