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

スイッチのようなステートメントはありません。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 に答える