如何在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
答案 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;