@MagDarkElf

Как отфильтровать таблицу по столбцу значение которого входит/не входит в список значений?

При генерации SQL из кода доступна только одна строка условия

SELECT * FROM [dbo].[data] WHERE ([dbo].[data].[intField] IN (0,1,2,8,9))=@p1


при генерации могу изменять только
([dbo].[data].[intField] IN (0,1,2,8,9) - этот кусок

в @p1 - bit(bool) передаётся
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Вариант 1:
Пришить NOT в текст запроса, в зависимости от состояния p1:
"SELECT * FROM [dbo].[data] WHERE ([dbo].[data].[intField] " + (p1 ? "" : "NOT") + " IN (0,1,2,8,9))"

Вариант 2, если MS SQL поддерживает тип bool в SQL, то такое выражение:
SELECT * FROM [dbo].[data]
      WHERE @p1 = true and [dbo].[data].[intField] IN (0,1,2,8,9)
              or @p1 = false and [dbo].[data].[intField] NOT IN (0,1,2,8,9)

Вариант 2.1, если MS SQL не поддерживает тип bool в SQL, то нужно p1 придать значение 0/1 вместо false/true, тогда выражение:
SELECT * FROM [dbo].[data]
          WHERE @p1 = 0 and [dbo].[data].[intField] IN (0,1,2,8,9)
                  or @p1 = 1 and [dbo].[data].[intField] NOT IN (0,1,2,8,9)
Ответ написан
Комментировать
erge
@erge
Примус починяю
SELECT *
  FROM [dbo].[data]
  WHERE ( @p1 = 0 AND [dbo].[data].[intField] NOT IN (0,1,2,8,9) )
     OR ( @p1 = 1 AND [dbo].[data].[intField]     IN (0,1,2,8,9) )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы