Atrapar Error de SQL Server

07/07/2004 - 10:32 por Serafin Salazar | Informe spam
Hola, tengo un procedimiento que elimina registros de una tabla. Esta tabla
es referenciada por otras, lo que desea es que si se esta violando alguna
regla de integridad referencial como foreign key, el procedimiento me
devuelva el codigo de error, de tal manera que en una pagina asp pueda, de
acuerdo al error retornado, mostrar un mensaje amigable al usuario.
Lo que tengo es lo siguiente:


create proc proc_Delete
as
begin
set nocount on
declare @mierror integer
select @mierror=0
begin tran a
delete from caf_warnings_state where ws_key2
set @mierror=@@error
if @mierror<>0
begin
rollback tran a
goto salir
end
commit tran a
salir:
return (@mierror)
end

y lo estoy invocando asi:

declare @salida int
exec @salida =proc_Delete
select @salida

pero no me devuelve unicamente el codigo de error, y obtengo problemas desde
la pagina con todo ese texto extra...alguna ayuda por favor.

Mil gracias!

Preguntas similare

Leer las respuestas

#1 Serafin Salazar
07/07/2004 - 14:31 | Informe spam
Hola Javier, si estoy usando ADO desde ASP. Pero me genera un error al
tratar de Ejecutar el procedimiento almacenado de esta forma:


sql=" declare @salida int" & _ " exec @salida =proc_Delete" & _ " select
@salida " set rs=conn.execute(sql) response.Write rs(0)

Ni siquiera ejecuta el sql, me muestra el mismo error de llave foranea

Microsoft OLE DB Provider for SQL Server (0x80040E2F)
Instrucción DELETE en conflicto con la restricción COLUMN REFERENCE
'fkprueba'. El conflicto ha aparecido en la base de datos 'DEV02BVS', tabla
'caf_warnings_stage', column 'wst_ws_key'.
/dev02bvs/pruebapalm.asp, line 37



"Javier Loria" escribió en el mensaje
news:%
Mostrar la cita
error
Mostrar la cita
(como
Mostrar la cita
#2 Serafin Salazar
07/07/2004 - 15:20 | Informe spam
el asusnto es que ASP no es posible usar On error goto to...
"Javier Loria" escribió en el mensaje
news:%23$
Mostrar la cita
usar
Mostrar la cita
herrumbrado
Mostrar la cita
#3 Javier Loria
07/07/2004 - 19:21 | Informe spam
Hola:
Asumo que en la pagina asp estas usando ADO, si es asi en el objeto
conexion existe una coleccion errors, debes buscar en esta coleccion el
error. El objeto error tiene un numero NativeError que es el numero de error
de SQL.
Personalmente prefiero personalizar los mensajes en la aplicacion (como
estas haciendo), pero tambien es posible personalizarlo en SQL. Para esto
puedes hacer un RAISERROR.
= IF EXIST (SELECT *
FROM TablaReferenciada
WHERE Columna=@Valor)
BEGIN
RAISERROR('El codigo %s, se esta usando en X ',
16, 1, @Valor)
END
= Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Serafin Salazar escribio:
Mostrar la cita
#4 Javier Loria
07/07/2004 - 21:58 | Informe spam
Hola Serafin:
Puedes revisar el objeto command para usar parametros en ADO debes usar
el objeto command.
En todo caso, deberia verse asi:
==
On Error Goto ErrorBD
SET rs=Conn.Execute()
Response.Write rs(0)
Exit Sub
:ErrorDB
Dim E
For Each E In Conn.Errors
Response.Write E.NativeError
Respones.Write E.Description
Next
Exit Sub
== Es posible que tenga erroes de sintaxis porque estoy un poco herrumbrado
con VB y ASP, pero espero darte una idea.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Serafin Salazar escribio:
Mostrar la cita
#5 Serafin Salazar
08/07/2004 - 09:52 | Informe spam
si.
"Javier Loria" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida