SQL Int 数组和 IN 语句

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13508617/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 12:15:48  来源:igfitidea点击:

Int array and IN statement

sqlsql-server

提问by Jacek

How can I declare int array in SQL Server?

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

After fill it, I would like to use it in IN statement to check, how can I change my code?

填完后,想在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

回答by podiluska

In databases, don't ever think of arrays. Think of sets, or tables.

在数据库中,永远不要考虑数组。想想集合或表格。

The structure of the insert statement should be

插入语句的结构应该是

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

You can use if

您可以使用 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

However, it may be worth having a FormTypeModeAcceptedtable depending on your usage.

但是,FormTypeModeAccepted根据您的使用情况,可能值得拥有一张桌子。

回答by Guffa

There is no switch-like statement, the caseis an expression, so you would use if.

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

To insert multiple records, you use values (2), (4)instead of values (2, 4).

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

When using the table in in, you need to select from it.

使用中的表时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)

回答by GarethD

To switch statements you need to use IFrather than CASE, you also need to put each value to insert in it's own parentheses.

要使用IF而不是使用 switch 语句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;