Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Int array and IN statement

Tags:

sql

sql-server

How can I declare int array in SQL Server?

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

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
like image 588
Jacek Avatar asked Mar 31 '26 15:03

Jacek


2 Answers

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 @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 FormTypeModeAccepted table depending on your usage.

like image 83
podiluska Avatar answered Apr 02 '26 13:04

podiluska


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

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

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

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)
like image 41
Guffa Avatar answered Apr 02 '26 11:04

Guffa



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!