У меня есть следующие два SQL заявления«IF..ElseIf..Else» или «Где пункт» для поводырей хранимых процедур приводит к
Первый один:
IF(@User_Id IS NULL)
BEGIN
SELECT *
FROM [UserTable]
END
ELSE
BEGIN
SELECT *
FROM [UserTable] AS u
WHERE u.[Id] = @User_Id
END
Второй один:
SELECT *
FROM [UserTable] AS u
WHERE (@User_Id IS NULL OR u.[Id] = @User_Id)
Оба этих запроса будут завернуты в собственную хранимую процедуру. Я подозреваю, что оператор IF вызывает много перекомпиляции SQL. Я столкнулся либо с разделением каждой части оператора IF на свою собственную хранимую процедуру, либо с заменой всей инструкции IF предложением WHERE (показано выше во втором заявлении SQL)
Мой вопрос: в чем разница между два утверждения с точки зрения производительности и как SQL обрабатывает каждое утверждение?
Спасибо.
Если вы используете SQL Server 2005+, почему бы не посмотреть на план выполнения, чтобы узнать, в чем разница? –
Кроме того, вам не нужно повторять проверку, если @User_Id НЕ НУЛЛ в вашем заявлении ELSE, поскольку вы знаете, что это не NULL. –
Ardman Я согласен, что «else if» может быть «else» :) – MikeStichling