С помощью SQL Server у меня есть хранимая процедура, в которой я хочу сделать строковый поиск необязательным.SQL Conditional String compare in Where where
@search
является параметром. Если @search
имеет значение, я хочу найти строку, иначе, если она пуста, она должна обойти поиск.
Я просто хотел узнать ваши мысли об оптимальном способе написания необязательного строкового поиска в ГДЕ.
Сейчас у меня есть как
AND (@search = '' OR [t4].number like '%'[email protected]+'%')
Но то, что я не был в состоянии выяснить, является ли, как оценивает, даже если @search = ''
верно
Если он еще сравнить обе стороны ИЛИ я думал об использовании этого
AND (CASE WHEN @search = '' THEN 1
ELSE (CASE WHEN [t4].number like '%'[email protected]+'%' THEN 1
ELSE 0 END) END) = 1
Edit: Я сделал пару тестов, и это выглядит так же менее читает.
В общем, небезопасно использовать короткое замыкание (как в вашем первом выражении), так как оптимизатор можно оценить в любом порядке - см. [Http://rusanu.com/2009/09/13/on-sql- server-boolean-operator-short-circuit /] (http://rusanu.com/2009/09/13/on-sql-server-boolean-operator-short-circuit/) – wmz