В запросе с предложением coalesce оптимизатор знает, что «MyColumn» - это диапазон значений, поэтому он решит использовать сканирование индекса. Единственный метод, который использует поиск, когда передается ненулевая переменная, - это кодирование двух сохраненных процедур и вызов подходящего с помощью логического тестирования переменной.
Если у вас такая простая ситуация, как в вашем примере, и вы хотите использовать поиск по индексу, когда переменная NOT NULL, вам следует кодировать запрос следующим образом:
If @MyColumn is NULL
Begin
EXEC MyStoredProcWithMyColumn=Mycolumn
END
ELSE
Begin
EXEC MyStoredProcWithMyColumn=Variable @MyColumn
END
после создания двух хранимых процедур, одна из которых возвращает данные, используя предложение where с переменной, а другая - с использованием where для столбца, равного самой себе.