2010-07-25 18 views
11

Supongamos que tengo un poco de procedimiento almacenado (y no puedo cambiarlo), que devuelve un conjunto de resultados:evitar devolver conjunto de resultados de procedimiento almacenado

create procedure test_procedure 
as 
begin 

    select 1 

end 

Sé que puedo insertar conjunto de resultados en la tabla, por lo que se oculta al código de llamada:

declare @t table(i int) 

insert into @t 
exec test_procedure 

¿hay otras maneras de ocultar devolver conjunto de resultados del código de llamada?

Actualizado

Parece como si hubiera estado un poco confuso. Estoy buscando únicamente respuestas T-SQL (no .NET).

+0

¿Cuál es exactamente el problema al devolver este conjunto de resultados? Siempre puede ignorar el conjunto de resultados y dejar que el recolector de basura se encargue de ello. –

+1

@Cylon Cat RE "deja que el recolector de basura se encargue de eso", ni siquiera es el caso. TDS es un protocolo de transmisión ... si no lee el resultado, no necesariamente será devuelto al cliente. Incluso si partes de él son devueltas al cliente, podrían manejarse en código nativo, a menos que se lea con DataReader et al. –

+0

Cylon Cat: ¿Qué sucede si no puedo ignorar el conjunto de resultados? p.ej. el código que llama a mi procedimiento asume que no se devuelve ningún conjunto de resultados. –

Respuesta

3

No, no hay otra solución. Sin embargo, debe refactorizar su procedimiento para hacer solo lo que necesita. Si necesita la salida para otras llamadas, intente dividir el procedimiento en dos.

0

¿Prefiere intentar devolver sus datos a través de un parámetro de salida y devolver un código de estado como el valor de retorno del procedimiento?

No podría devolver fácilmente un conjunto de resultados completo a través de ese parámetro de salida, pero podría devolver algunos datos delimitados en el formato que elija.

+0

Como dije, no puedo cambiar el procedimiento almacenado que devuelve el conjunto de resultados. –

+0

¿Podría envolverlo en otro procedimiento sobre el que tenga control? Su envoltorio podría tirar el resultado. – Allbite

1

Use el parámetro de salida opcional.

o utilizar a continuación caso

Create procedure Check @c int 
as 
begin 
if @c = 1 
    select 1 
else 
    print 1 
end 

escribir cualquier condición que satisfaga y que devuelve los valores especificados. use ese parámetro como opcional, de modo que no se producirán otros cambios en su procedimiento.

Cuestiones relacionadas