Я работаю над оптимизацией некоторых сильно используемых хранимых процедур и сталкивался с сценарием, который вызвал вопрос, на который я не мог найти ответы: при оценке TSQL в хранимой процедуре SQL Server коротко замыкает заявление IF
?Имеет ли SQL-запрос коротких замыканий IF?
Например, предположим, что хранимая процедура имеет код, подобный:
IF @condition1 = 1
OR EXISTS(SELECT 1 FROM table1 WHERE column1 = @value1)
...
В этом случае делает SQL Server короткого замыкания оценки, так что EXISTS
утверждение никогда не выполняется, когда предыдущий пункт имеет значение верно?
Если это никогда или только иногда происходит, то у нас есть переписывание впереди нас.
Не гарантируется. Проверьте план выполнения, чтобы убедиться, что это происходит в вашем случае. –
Спасибо, «не гарантировано» - это то, что я искал. Проблема в том, что эти хранимые процедуры выполняются на сотнях клиентских БД, поэтому, если план выполнения определяет это, мы не можем предположить, что он будет оцениваться одинаково в системе каждого клиента и должен быть переписан. –
Если вы хотите гарантию на чугун, тогда разделение на несколько операторов 'if' будет делать это. Когда [я смотрел на это раньше] (http://stackoverflow.com/a/5543985/73226), я нашел несколько примеров того, что это не короткое замыкание. Вы могли бы также изучить использование операторов case. –