Определите переменную для использования с оператором IN (T-SQL) - PullRequest
108 голосов
/ 10 ноября 2009

У меня есть запрос Transact-SQL, который использует оператор IN. Примерно так:

select * from myTable where myColumn in (1,2,3,4)

Есть ли способ определить переменную для хранения всего списка "(1,2,3,4)"? Как мне это определить?

declare @myList {data type}
set @myList = (1,2,3,4)
select * from myTable where myColumn in @myList

Ответы [ 13 ]

0 голосов
/ 30 марта 2019

Как никто раньше не упоминал, начиная с Sql Server 2016 вы также можете использовать массивы json и OPENJSON (Transact-SQL):

declare @filter nvarchar(max) = '[1,2]'

select *
from dbo.Test as t
where
    exists (select * from openjson(@filter) as tt where tt.[value] = t.id)

Вы можете проверить это в sql fiddle demo

С помощью json вы также можете проще охватить более сложные случаи - см. Поиск списка значений и диапазона в SQL с использованием предложения WHERE IN с переменной SQL?

0 голосов
/ 20 марта 2017
DECLARE @StatusList varchar(MAX);
SET @StatusList='1,2,3,4';
DECLARE @Status SYS_INTEGERS;
INSERT INTO  @Status 
SELECT Value 
FROM dbo.SYS_SPLITTOINTEGERS_FN(@StatusList, ',');
SELECT Value From @Status;
0 голосов
/ 10 ноября 2009

Я думаю, вам придется объявить строку и затем выполнить эту строку sql.

Посмотрите на sp_ExecuteSQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...