делая предложение where необязательным, проверяя значение переменной в операторе sql - PullRequest
2 голосов
/ 17 апреля 2020

Есть ли опция в sql, где я могу сделать предложение where в операторе выбора необязательным, основываясь на значении переменной. Например: - Если у меня есть запрос, подобный этому.

Declare
@selection int=1
select name,age,department from employee where age > 25

Я хочу сделать предложение where, которое будет применяться, только если @ selection = 1, и не применять, если @selection - что-то еще. Могу ли я сделать это без условия if?

Ответы [ 3 ]

2 голосов
/ 17 апреля 2020

Вы можете использовать логические логики c в предложении where:

declare @selection int = 1
select name, age, department 
from employee 
where (@selection = 1 and age > 25) or @selection <> 1
1 голос
/ 17 апреля 2020

Если ваш запрос довольно короткий, вы можете просто продублировать запрос и получить один с оператором where, а другой - без, и выполнить их на основе значения переменной. Вот так:

Declare @selection int=1
IF @selection = 1
BEGIN
 select name,age,department from employee where age > 25
END
ELSE
BEGIN
 select name,age,department from employee
END

Возможно, есть более элегантные решения, но они справятся с задачей, если вы спешите и не возражаете против дублирования.

1 голос
/ 17 апреля 2020

Вы можете express, что логически c, используя ИЛИ

select name,age,department 
from employee 
where @selection <> 1 or age > 25

Если @selection <> 1, то первая часть условия гарантирует, что все строки будут возвращены, но если это точно 1, тогда вы проверите «age> 25»

Я бы добавил функцию isnull, чтобы гарантировать, что когда @selection содержит нулевое значение, он по-прежнему возвращает все строки.

select name,age,department 
from employee 
where isnull(@selection, 0) <> 1 or age > 25
...