Или, вы можете пойти с
select a.PKID
from Alerts a
where ISNULL(@bitActive, a.Active) = a.Active
Это по сути то же самое, что и предыдущий ответ, но избегает использования ИЛИ в Где.
Я должен отметить, что вы можете получить более высокую производительность, используя ваш текущий код, так как это позволяет избежать выполнения теста IS NULL в каждой строке. Если вы используете индексы для ваших данных, тест IS NULL может означать, что оптимизатор запросов вашего ядра СУБД не может использовать индексы, которые могут привести к неоптимальному пути выполнения.
По опыту могу сказать, что мы заметили значительное улучшение (от минут до секунд), удалив проверки ISNULL и написав SQL, специфичный для параметров, с помощью операторов IF или динамического SQL.
Мы используем Sql Server 2008, поэтому ваш пробег может отличаться, если вы используете другой движок. Я предлагаю вам сделать несколько тестов, чтобы увидеть, есть ли какие-либо проблемы с производительностью в вашей базе данных.
Cheers,
Дин.