Estoy escribiendo procs almacenados que están siendo llamados por un sistema heredado. Una de las limitaciones del sistema heredado es que debe haber al menos una fila en el único conjunto de resultados devuelto por el proceso almacenado. El estándar es devolver un cero en la primera columna (sí, lo sé).Agregar fila vacía a los resultados de la consulta si no se encontraron resultados
La forma obvia de lograr esto es crear una tabla temporal, poner los resultados en ella, probar las filas en la tabla temporal y devolver los resultados de la tabla temporal o el resultado vacío simple.
Otra forma podría ser hacer un EXISTS contra la misma cláusula where en la consulta principal antes de que se ejecute la consulta principal.
Ninguno de estos es muy satisfactorio. ¿Alguien puede pensar en una mejor manera? Estaba pensando por las líneas de una unión algo así como esto (soy consciente de que esto no funciona):
--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
Considera la posibilidad de revisar la respuesta aceptada después de leer la solución de @ swe! Es tan bueno que admito que sentí la necesidad de empujarte aquí;) http: // stackoverflow.com/a/32586119/2979473 – ensisNoctis
@ensisNoctis a menos que esté muy equivocado, esa solución solo funcionará en situaciones en las que espere cero o un resultado –
Afortunadamente, usted es, por favor permítame compartir con usted este código que es actualmente en producción en mi compañía, todo gracias a StackOverflow;) No cabía todo en este comentario, así que publiqué otra respuesta, pero sigue siendo de @ swe, solo mejor formateada. http://stackoverflow.com/a/37046650/2979473 Devuelve filas de la tabla deseada si existen (cualquier número> = 1), de lo contrario filas de otra tabla (o literal, como en mi ejemplo). – ensisNoctis