2008-10-29 7 views
6

Cuando trato de ejecutar un procedimiento almacenado en particular en mi base de datos MS SQL 2005, me sale un error como el siguiente:¿Cómo averiguo en qué línea de procedimiento almacenado ocurrió un error?

Subquery returned more than 1 value. This is not permitted when 
the subquery follows =, !=, <, <= , >, >= or when the subquery 
is used as an expression 

El SP en la consulta es muy largo y pide otros SP. Evidentemente, este error está siendo producido por el propio SQL y regresó a la pila de llamadas, pero sin mencionar qué SP o número de línea causaron el problema. ¿Cómo puedo averiguar dónde se lanzó el error para poder depurarlo más fácilmente?

Respuesta

5

El uso del Try/Catch block debería darle lo que está buscando.

En el ámbito de un bloque CATCH, las siguientes funciones del sistema se pueden utilizar para obtener información sobre el error que causó el bloque CATCH a ser ejecutado:

* ERROR_NUMBER() returns the number of the error. 
* ERROR_SEVERITY() returns the severity. 
* ERROR_STATE() returns the error state number. 
* ERROR_PROCEDURE() returns the name of the stored procedure or trigger where the error occurred. 
* ERROR_LINE() returns the line number inside the routine that caused the error. 
* ERROR_MESSAGE() returns the complete text of the error message. The text includes the values supplied for any substitutable parameters, such as lengths, object names, or times. 

Así, en su caso, ERROR_LINE() y ERROR_PROCEDURE() debería ser lo que quieras ...

+0

¡Funciona! ¡Gracias! – apenwarr

Cuestiones relacionadas