Мне нужно написать запрос, который получает набор информации из таблицы, но если нет информации для этого конкретного клиента, используйте набор по умолчанию. Мне было интересно, есть ли способ избежать дублирования запросов в операторе if (exist ()).
Например:
IF( EXISTS( SELECT * FROM UserTable WHERE Name = @UserName))
BEGIN
SELECT * FROM UserTable WHERE Name = @UserName))
END
ELSE
BEGIN
SELECT * FROM UserTable WHERE Name = 'Jon Skeet'))
END
Первые два выбора (существует и истинная часть if) абсолютно одинаковы. Я хочу избежать запуска одного и того же запроса дважды, если утверждение верно. Я знаю, что существуют остановки, когда первое истинное условие выполнено, но это все еще O (n) худший случай.
Другая известная мне опция - поместить информацию в временную таблицу и проверить, есть ли информация, если нет, вернуть информацию по умолчанию.
Оба способа будут работать, но как лучше всего это сделать? Есть ли другие способы сделать это? Есть ли способ сделать это в предложении WHERE, поскольку это единственное, что отличается?
Редактировать: Исправлен пример возврата строки, а не только одного элемента. Таким образом, ответы на сброс выборки в одну переменную будут равны временной таблице, которую я предполагаю. Также, чтобы не разозлить Джона Скита, пишется его имя правильно