Tengo un trabajo programado a través del Agente SQL Server que ejecuta un sproc que ejecuta algunos otros sprocs. Cada sproc se ve así:¿Cómo puedo generar un error que SQL verá como un error de trabajo?
BEGIN TRY
-- do stuff
END TRY
BEGIN CATCH
DECLARE @errorMessage varchar(4000)
DECLARE @procName varchar(255)
SELECT @errorMessage = error_message()
SELECT @procName = OBJECT_NAME(@@PROCID)
RAISERROR('%s threw an exception: %s', 16, 1, @procName, @errorMessage)
END CATCH
Todo esto funciona bien - los errores son criados y arrojados por la pila, la vida es buena. Sin embargo, mis llamadas RAISERROR no parecen hacer que el trabajo falle: estoy configurado para recibir una notificación por correo electrónico "Cuando el trabajo falla", pero nunca recibo una. Las notificaciones por correo electrónico están funcionando, ya que recibiré correos electrónicos si cambio la notificación a "cuando el trabajo tenga éxito". ¿Hay alguna otra función que debería usar aquí en lugar de RAISERROR?
¿Se vuelve a elevar el mensaje de error en el procedimiento de llamada almacenado? ¿Verifica el código de retorno de sus procedimientos almacenados? Puede encontrar la siguiente información útil [Error al verificar procesos almacenados anidados] (http://social.msdn.microsoft.com/Forums/en-ZA/transactsql/thread/f19be87b-93ae-472d-8be7-0f4dbe1815b2) –
IMO Tim, publicar como respuesta –