Ответ 1
Переместите условие @tmpValue > 0
в предложение WHERE
следующим образом:
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0
У меня есть запрос вроде:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
IF @tmpValue > 0
SELECT * FROM Animal WHERE.Active = 0
Когда я использую это, он дает ошибку из-за условия. Я должен использовать UNION из-за нашей структуры.
Как я могу использовать его с условием if?
Спасибо,
Джон
Переместите условие @tmpValue > 0
в предложение WHERE
следующим образом:
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0
Вы можете добавить свое условие к запросу вроде этого. часть раздела объединения просто не вернет никаких результатов, если ваше тестовое условие ложно:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE.Active = 0 and @tmpValue > 0
Лучший способ поставить условие в Query - это оператор CASE. вы можете поставить любое количество условий в запросе. Оператор CASE используется для установки условных фильтров в Query.
Для EX.
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal
WHERE
1 = CASE WHEN @tmpValue = 0 THEN 0 ELSE Active = 1 END
ваша ситуация не сложна, но для более сложного условия вы можете использовать вложенный запрос CASE в Query.
Вот способ сделать это, что упрощает код, полностью избавившись от UNION. Я всегда предпочитаю более простое решение, где это возможно. Это также будет лучше работать, если выбор выполняет сканирование таблицы, поскольку он будет сканировать его один раз, а не (потенциально) дважды.
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1 OR @tmpValue > 0