valor stored retorno retornar procedimientos procedimiento parametros para obtener mostrar fecha ejecutar devolver datos con almacenados almacenado sql-server stored-procedures msdn

sql-server - stored - procedimientos almacenados sql



MSDN sobre el valor de retorno predeterminado del procedimiento almacenado (4)

Parece que alguna vez el valor de retorno pudo haber significado algo (consulte la referencia del artículo anterior al valor de retorno de SQL 2000 BOL) antes de SQL Server 2000. Revisé para ver si podía encontrar una lista de estos códigos de retorno originales específicamente para MS SQL, y encontró lo siguiente (aunque no sé su autenticidad, y en realidad no enumera los valores).

Entonces, después de leer todos estos artículos, parece que @return_status es un parámetro SIEMPRE devuelto cuando se ejecuta un procedimiento almacenado (incluso si no lo usa). De acuerdo con el artículo en línea RETURN Books, el código de retorno NO PUEDE ser nulo.

Cuando se usa con un procedimiento almacenado, RETURN no puede devolver un valor nulo. Si un procedimiento intenta devolver un valor nulo (por ejemplo, utilizando RETURN @status cuando @status es NULL), se genera un mensaje de advertencia y se devuelve un valor de 0.

La ejecución de la siguiente T-SQL definitivamente muestra esto,

create Procedure Test as begin DECLARE @RTN integer Return @RTN END GO Exec Test GO Drop Procedure Test GO

Recibirás

The ''Test'' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.

Al final parece que la respuesta es porque @return_status no puede ser nulo (siendo 0 cuando no está establecido, o establecido en NULL) ...

En cuanto a los códigos de error mencionados en el supuesto artículo de BOL para SQL 7.0, mi conjetura sería una vieja retención de Sybase ... Sybase 5.0 Manual

Kris

¿Podría alguien señalar exactamente dónde MSDN dice que cada procedimiento almacenado por el usuario devuelve 0 por defecto si no ocurre ningún error? En otras palabras, ¿podría estar seguro de que el código de ejemplo que figura a continuación es un procedimiento almacenado?

IF someStatement BEGIN RETURN 1 END

siempre debe devolver cero si someStatement es falso y no se produce ningún error?

Sé que realmente funciona de esta manera, pero no pude encontrar ninguna declaración explícita sobre esto de Microsoft.


Si va a cambiar algo de lógica en su cliente, ¿por qué no devuelve "0" y lo hace más explícito?


REGRESAR en MSDN

Editar:

El enlace dice

Cuando se usa con un procedimiento almacenado, RETURN no puede devolver un valor nulo. Si un procedimiento intenta devolver un valor nulo (por ejemplo, utilizando RETURN @status cuando @status es NULL), se genera un mensaje de advertencia y se devuelve un valor de 0.

Se podría decir que no RETURN = RETURN NULL = RETURN 0. Pero no se emite ninguna advertencia porque no se ha ejecutado RETURN NULL . Y se espera cero porque es un procedimiento almacenado.

Además, la ejecución del proceso almacenado permite

EXEC @rtn = uspMyProc @p1...

Entonces algo debe ser devuelto porque siempre esperamos un valor, nunca NULO

Me he basado en que no se devuelve cero durante 12 años, incluso si MSDN no dice nada. Además de muchos más de nosotros :-)