Присвойте список целых чисел @var - PullRequest
4 голосов
/ 07 апреля 2010

Я могу:

declare @idOrder int
set @idOrder = 21319

Я хочу:

declare @idOrder int
set @idOrder = (21319, 21320)

для использования в серии операторов, где в предложении WHERE используется оператор IN

delete Orders
where idOrder in @idOrder

вместо

delete Orders
where idOrder in (21319, 21320)

Ответы [ 2 ]

6 голосов
/ 07 апреля 2010

Вы не можете сделать это, пока это int, так как это недопустимое значение для этого типа данных. Тип данных, который может принимать несколько целых чисел: table

declare @idOrder table (id int)

insert into @idOrder values(21319)
insert into @idOrder values(21320)

delete from Orders where idOrder in (select id from @idOrder)
3 голосов
/ 07 апреля 2010

В SQL Server вы также можете

CREATE FUNCTION [dbo].[fn_ado_param_int] (@ado nvarchar(4000))
RETURNS @VALUES TABLE (ado int)AS
   BEGIN
   declare @Delim char(1)
   set @Delim = ','
   DECLARE @chrind INT
   DECLARE @Piece nvarchar(4000)
   SELECT @chrind = 1
   WHILE @chrind > 0
      BEGIN
         SELECT @chrind = CHARINDEX(@Delim,@ado)
         IF @chrind > 0
            SELECT @Piece = LEFT(@ado,@chrind - 1)
         ELSE
            SELECT @Piece = @ado
         INSERT @VALUES(ado) VALUES(@Piece)
         SELECT @ado = RIGHT(@ado,LEN(@ado) - @chrind)
         IF LEN(@ado) = 0 BREAK
      END
   RETURN
END

declare @idOrder varchar(500);
set @inOrder = "21319,2138,2138";
delete from Orders where id in (select ado from dbo.fn_ado_param_int(@idOrder));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...