2

如何在 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
4

3 回答 3

8

在数据库中,永远不要考虑数组。想想套装或桌子。

插入语句的结构应该是

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但是,根据您的使用情况,可能值得拥有一张桌子。

于 2012-11-22T08:44:32.260 回答
4

没有类似 switch 的语句,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)
于 2012-11-22T08:46:03.177 回答
2

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

例如

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;
于 2012-11-22T08:46:07.487 回答