Выберите все строки по переменной в предложении WHERE в SQL Server - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть процедура, и иногда я хочу выбрать строки с myBool = 0, иногда с 1, а иногда со всеми строками (поэтому не имеет значения, 0 или 1). Как я могу написать выражение, которое делает это, но с использованием локальной переменной в предложении WHERE? Итак, чтобы быть построенным так:

SELECT * FROM table WHERE myBool = @myBool;

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Каноническим способом было бы позволить @myBool принять значение NULL:

WHERE myBool = @myBool OR @myBool IS NULL

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

1 голос
/ 27 февраля 2020

Учитывая простоту, я бы предложил использовать значения 1, 0 и NULL для @MyBool, тогда вы можете сделать следующее:

SELECT {Columns}
FROM dbo.YourTable
WHERE MyBool = @MyBool
   OR @MyBool IS NULL;

Обратите внимание, что может привести к неправильному кэшированию плана запроса, поэтому я бы рекомендовал добавить OPTION (RECOMPILE) к запросу.

1 голос
/ 27 февраля 2020

Если вы хотите и то, и другое, не нужно передавать 1 or 0, чтобы сделать его пустым:

where (myBool = @myBool or @myBool is null)
...