Я пишу хранимые procs, которые вызываются унаследованной системой. Одним из ограничений устаревшей системы является то, что в едином результирующем наборе, возвращаемом из сохраненного процесса, должна быть хотя бы одна строка. Стандарт должен вернуть ноль в первом столбце (да, я знаю!).
Очевидный способ добиться этого - создать временную таблицу, поместить в нее результаты, протестировать любые строки в таблице temp и либо вернуть результаты из таблицы temp, либо один пустой результат.
Другим способом может быть выполнение EXISTS против того же предложения where, что и в основном запросе до выполнения основного запроса.
Ни одно из них не очень удовлетворительно. Может ли кто-нибудь подумать о лучшем пути. Я думал о таких типах UNION вроде этого (я знаю, что это не работает):
--create table #test
--(
-- id int identity,
-- category varchar(10)
--)
--go
--insert #test values ('A')
--insert #test values ('B')
--insert #test values ('C')
declare @category varchar(10)
set @category = 'D'
select
id, category
from #test
where category = @category
union
select
0, ''
from #test
where @@rowcount = 0