Я пишу хранимые процедуры, которые вызываются устаревшей системой.Одно из ограничений унаследованной системы заключается в том, что в одном наборе результатов, возвращаемом из сохраненного процесса, должна быть хотя бы одна строка.Стандарт заключается в том, чтобы возвращать ноль в первом столбце (да, я знаю!).
Очевидный способ добиться этого - создать временную таблицу, поместить в нее результаты, проверить все строки во временной переменной.table и либо возвращает результаты из временной таблицы, либо из одного пустого результата.
Другой способ может заключаться в том, чтобы выполнить 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