Cómo enviar un mail al fallar un SP

22/07/2003 - 10:30 por naimps | Informe spam
Hola a tod@s.

Primero: he posteado esta noticia en el grupo sqlserver.administracion,
pero ahora no lo veo (estoy utilizando un lector nuevo y no lo domino
mucho). Perdón por repetir.

Al grano.

¿Cómo puedo detectar un error del tipo:

Servidor: mensaje 207, nivel 16, estado 1, línea 1
Invalid column name 'via_paxini'.?
He probado con IF (@@ERROR <> 0), pero no nada de nada.

Enviar un mail se cómo hacerlo, pero detectar y poder tratar un error de
este tipo (o de Foreing Key, ...) no tengo ni idea. Y he buscado en los
BOL.

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 naimps
22/07/2003 - 12:33 | Informe spam
Sorry.

Ahora me explico.

Tengo un SP que llama a otros SP. Cada SP genera inserts o updates.

El problema que tengo es que a veces (más de las que me gustaría) tengo
errores del tipo de intentar actualizar un campo int con un string, o un SP
pasa un valor negativo a otro SP el cual lo tiene definido del tipo tinyint
con lo cual cataclack,...

En ejemplo que ponía:
Servidor: mensaje 207, nivel 16, estado 1, línea 1
Invalid column name 'via_paxini'.?




,tal como dice el mensaje, hago referencia a una columna que no existe.

Lo que me gustaría es poder recojer este error, llamar a un SP que tengo
para enviar emails, y enviarme un mail con el error.

Despué de cada sentencia tengo puesto IF (@@ERROR <> 0), pensando que si
hay un error pues así lo podría tratar, pero tururú que te vi.

Espero que se entienda.


[posted and mailed]

"Carlos Sacristan" <csacristanARROBAocasoPUNTOes> wrote in
news:#:


Si nos dices dónde estás intentado hacer qué, tal vez podamos
ayudarte,
pero con la información que nos facilitas, poco podemos hacer...



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"naimps" escribió en el mensaje
news:
Hola a

Primero: he posteado esta noticia en el grupo
sqlserver.administracion, pero ahora no lo veo (estoy utilizando un
lector nuevo y no lo domino mucho). Perdón por repetir.

Al grano.

¿Cómo puedo detectar un error del tipo:

Servidor: mensaje 207, nivel 16, estado 1, línea 1
Invalid column name 'via_paxini'.?
He probado con IF (@@ERROR <> 0), pero no nada de nada.

Enviar un mail se cómo hacerlo, pero detectar y poder tratar un error
de este tipo (o de Foreing Key, ...) no tengo ni idea. Y he buscado
en los BOL.

Muchas gracias.




Respuesta Responder a este mensaje
#2 Carlos Sacristan
22/07/2003 - 13:52 | Informe spam
¿Estás ejecutando sentencias dinámicamente entonces?



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"naimps" escribió en el mensaje
news:
Sorry.

Ahora me explico.

Tengo un SP que llama a otros SP. Cada SP genera inserts o updates.

El problema que tengo es que a veces (más de las que me gustaría) tengo
errores del tipo de intentar actualizar un campo int con un string, o un


SP
pasa un valor negativo a otro SP el cual lo tiene definido del tipo


tinyint
con lo cual cataclack,...

En ejemplo que ponía:
>> Servidor: mensaje 207, nivel 16, estado 1, línea 1
>> Invalid column name 'via_paxini'.?
,tal como dice el mensaje, hago referencia a una columna que no existe.

Lo que me gustaría es poder recojer este error, llamar a un SP que tengo
para enviar emails, y enviarme un mail con el error.

Despué de cada sentencia tengo puesto IF (@@ERROR <> 0), pensando que si
hay un error pues así lo podría tratar, pero tururú que te vi.

Espero que se entienda.


[posted and mailed]

"Carlos Sacristan" <csacristanARROBAocasoPUNTOes> wrote in
news:#:

>
> Si nos dices dónde estás intentado hacer qué, tal vez podamos
> ayudarte,
> pero con la información que nos facilitas, poco podemos hacer...
>
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> Por favor, responder únicamente al foro
>
> (Guía de netiquette del foro)
> http://www.helpdna.net/bosqlfaq00.htm
> http://perso.wanadoo.es/rubenvigon/foro
>
> (FAQ's de SQL Server)
> http://support.microsoft.com/defaul.../70faq.asp
> http://www.helpdna.net/bosqlfaq.htm
>
> "naimps" escribió en el mensaje
> news:
>> Hola a
>>
>> Primero: he posteado esta noticia en el grupo
>> sqlserver.administracion, pero ahora no lo veo (estoy utilizando un
>> lector nuevo y no lo domino mucho). Perdón por repetir.
>>
>> Al grano.
>>
>> ¿Cómo puedo detectar un error del tipo:
>>
>> Servidor: mensaje 207, nivel 16, estado 1, línea 1
>> Invalid column name 'via_paxini'.?
>> He probado con IF (@@ERROR <> 0), pero no nada de nada.
>>
>> Enviar un mail se cómo hacerlo, pero detectar y poder tratar un error
>> de este tipo (o de Foreing Key, ...) no tengo ni idea. Y he buscado
>> en los BOL.
>>
>> Muchas gracias.
>
>

Respuesta Responder a este mensaje
#3 Carlos Sacristan
22/07/2003 - 16:44 | Informe spam
¿¿¿???

No sé entonces cómo puedes ejecutar una sentencia del tipo que me
comentas sin hacerlo dinámicamente... Lo que comentas no da error,
simplemente no actualiza ningún campo. Si te está lanzando el error que has
dicho, tienes que estar ejecutando dinámicamente la sentencia; en cualquier
caso lo que tendrás que ver es porqué está intentando tratar un campo que no
existe



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"naimps" escribió en el mensaje
news:
Dinámicas... si te refieres a si creo sentencias y las ejecuto con EXEC,
pues no.

Sólo ejecuto SP.

Desde una página Web llamo a un SP principal, el cual va llamando a otros
SP. Cada SP tiene una o más sentencias del tipo:

UPDATE tabla1 SET @campo1 = @x WHERE id = @id
IF (@@ROWCOUNT = 0)
BEGIN
END


"Carlos Sacristan" <csacristanARROBAocasoPUNTOes> wrote in
news::

>
> ¿Estás ejecutando sentencias dinámicamente entonces?
>
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> Por favor, responder únicamente al foro
>
> (Guía de netiquette del foro)
> http://www.helpdna.net/bosqlfaq00.htm
> http://perso.wanadoo.es/rubenvigon/foro
>
> (FAQ's de SQL Server)
> http://support.microsoft.com/defaul.../70faq.asp
> http://www.helpdna.net/bosqlfaq.htm
>
> "naimps" escribió en el mensaje
> news:
>> Sorry.
>>
>> Ahora me explico.
>>
>> Tengo un SP que llama a otros SP. Cada SP genera inserts o updates.
>>
>> El problema que tengo es que a veces (más de las que me gustaría) tengo
>> errores del tipo de intentar actualizar un campo int con un string, o


un
> SP
>> pasa un valor negativo a otro SP el cual lo tiene definido del tipo
> tinyint
>> con lo cual cataclack,...
>>
>> En ejemplo que ponía:
>> >> Servidor: mensaje 207, nivel 16, estado 1, línea 1
>> >> Invalid column name 'via_paxini'.?
>> ,tal como dice el mensaje, hago referencia a una columna que no existe.
>>
>> Lo que me gustaría es poder recojer este error, llamar a un SP que


tengo
>> para enviar emails, y enviarme un mail con el error.
>>
>> Despué de cada sentencia tengo puesto IF (@@ERROR <> 0), pensando que


si
>> hay un error pues así lo podría tratar, pero tururú que te vi.
>>
>> Espero que se entienda.
Respuesta Responder a este mensaje
#4 naimps
22/07/2003 - 17:08 | Informe spam
Haber si nos aclaramos.

Este es el código de uno de los SP que utilizo.

CREATE PROCEDURE dbo.ic_spBilleteModifAgencia
(
@usuario tinyint, -- Indica qué usuario lo realiza.
@billete varchar(10), -- Billete a modificar.
@siglas char(3),
@agencia smallint,
@imprimir varchar(500) OUTPUT,
@error int OUTPUT,
@mensaje varchar(150) OUTPUT
)
AS

BEGIN

DECLARE @bil_id int SET @bil_id = left(@billete, charindex (',', @billete)
- 1)
DECLARE @pasaje varchar(100)
DECLARE @vehiculo varchar(50) SET @vehiculo = '{'
DECLARE @grupoida int
DECLARE @grupovuelta int
DECLARE @formapago tinyint
DECLARE @estado char(1)

SET @error = 1
SET @imprimir = '0'

SELECT @grupoida = bil_grupoida, @grupovuelta = bil_grupovuelta, @formapago
= bil_for_codi, @estado = bil_estado
FROM ic_billetes
WHERE (bil_id = @bil_id)

SELECT @pasaje = ic_bilper.bip_nombre + '{' + ic_bilper.bip_apell1 +
'{'
+ ic_bilper.bip_apell2 + '{' + ic_bilper.bip_dni +
'{{'
+ convert(varchar(6), ic_bilper.bip_completo_i) +
'{'
+ convert(varchar(6), ic_bilper.bip_tap_id_i) + '{'
+ convert(varchar(6), ic_bilper.bip_nac_id_i) +
'{{'
+ convert(varchar(6), ic_bilper.bip_completo_v) +
'{'
+ convert(varchar(6), ic_bilper.bip_tap_id_v) + '{'
+ convert(varchar(6), ic_bilper.bip_nac_id_v) + '{'
+ convert(varchar(6), ic_bilper.bip_tir_id) + '{'
+ convert(varchar(6), ic_bilper.bip_tasas) + '{'
+ convert(varchar(6), ic_bilper.bip_sexo) + '{'
+ convert(varchar(6), ic_bilper.bip_edad) + '{'
+ convert(varchar(6), ic_desperbil.dpb_tid_id) +
'{'
FROM ic_bilper
INNER JOIN ic_desperbil ON ic_bilper.bip_id =
ic_desperbil.dpb_bip_id
WHERE (ic_bilper.bip_bil_id = @bil_id)

SELECT @vehiculo = biv_matricula + '{' + biv_marca + '{' + biv_modelo
+ '{0{'
+ convert(varchar(6), biv_metros) + '{'
+ convert(varchar(6), biv_tav_id) + '{'
+ convert(varchar(6), biv_tdv_id) + '{'
FROM ic_bilveh
WHERE (biv_bil_id = @bil_id)

BEGIN TRAN

EXEC iscomar.ic_spBILANULARBILLETE
@billete,
1,
@usuario,
0,
@siglas,
@formapago,
@imprimir OUTPUT,
@error OUTPUT
IF (@error <> 0)
BEGIN
ROLLBACK TRANSACTION
SET @mensaje = 'ERROR EN MODIFICAR EL CODIGO DE AGENCIA (1).'
RETURN
END

EXEC iscomar.ic_spBILLETENUEVODEBILLETE
@pasaje,
@vehiculo,
@grupoida,
@grupovuelta,
@bil_id,
@usuario,
0,
0,
@siglas,
'',
@agencia,
@imprimir OUTPUT,
@error OUTPUT,
1,
',',
@estado
IF (@error <> 0)
BEGIN
ROLLBACK TRANSACTION
SET @mensaje = 'ERROR EN MODIFICAR EL CODIGO DE AGENCIA (2.' +
cast(@error as varchar) + ').'
RETURN
END

COMMIT TRAN

SET @mensaje = ''
SET @error = 0
SET @imprimir = @imprimir + '{'

END


Cuando hago la llamada "EXEC iscomar.ic_spBILANULARBILLETE", si el por lo
que sea el parámetro @usuario es mayor de 255, me dará un error, pues en el
SP ic_spBILANULARBILLETE está declarado como tinyint.

¿Cómo puedo tratar el error que dará el SQLServer?






"Carlos Sacristan" <csacristanARROBAocasoPUNTOes> wrote in
news:#8l4l#:


¿¿¿???

No sé entonces cómo puedes ejecutar una sentencia del tipo que me
comentas sin hacerlo dinámicamente... Lo que comentas no da error,
simplemente no actualiza ningún campo. Si te está lanzando el error
que has dicho, tienes que estar ejecutando dinámicamente la sentencia;
en cualquier caso lo que tendrás que ver es porqué está intentando
tratar un campo que no existe



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida