Исключить из результата, если его столбец содержит какое-либо значение в списке - PullRequest
2 голосов
/ 01 мая 2019

Допустим, у меня есть таблица SQL с идентификаторами от 1 до 30, но я хочу исключить числа 7,10,21 из sql.

Как бы я это сделал, не написав что-то вроде

SELECT * 
FROM TBL 
WHERE COL <> '7' AND COL <> '10' AND COL <> '21'

Но вместо этого напишите что-то вроде

SELECT * 
FROM TBL 
WHERE COL NOT IN (@IDS)

При попытке примера это работает, если @IDS равно одному числу, но если оно равно нескольким числам, все записи показывают.

Чтобы выяснить причину, по которой это должен быть список чисел, это то, как он передается в SQL. Я не могу изменить способ передачи данных.

Чтобы уточнить больше, потому что я должен был изложить это в первоначальном вопросе. Я не знаю точных чисел, передаваемых в инструкцию SQL, которые я предоставил для примера, но это может быть любое число.

1 Ответ

3 голосов
/ 01 мая 2019

Вы можете написать это как:

WHERE COL NOT IN (7, 10, 21)

Если вы хотите передать строку, вы можете разделить ее. В SQL Server 2016+ вы используете string_split() (и вы можете получить SPLIT() функций для более ранних версий в Интернете).

WHERE COL NOT IN (SELECT * FROM STRING_SPLIT('7,10,21'))

Обратите внимание, что это делает преобразование из строки в целые числа, что может помешать использованию индексов. Итак:

WHERE COL NOT IN (SELECT CONVERT(INT, value) FROM STRING_SPLIT('7,10,21'))

Или NOT EXISTS:

WHERE EXISTS (SELECT 
              FROM STRING_SPLIT('7,10,21')
              WHERE ?.COL = TRY_CONVERT(INT, value) 
             )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...