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

#6 Javier E. Romero T.
08/07/2004 - 15:02 | Informe spam
¿Sabe qué? ... ¡Abrase!.

"Serafin Salazar" escribió en el mensaje
news:%
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!


Respuesta Responder a este mensaje
#7 Javier Loria
08/07/2004 - 16:45 | Informe spam
Hola:
Estas totalmente seguro???
Ya estoy un poco herrumbrado con ASP pero creo que si lo soporta.
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:
el asusnto es que ASP no es posible usar On error goto to...
"Javier Loria" escribió en el mensaje
news:%23$
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:
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:%
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:
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!
Respuesta Responder a este mensaje
#8 Javier E. Romero T.
08/07/2004 - 16:50 | Informe spam
Fresco Serafo, era una simple broma, pero creo que en el histórico de google
puede encontrar la solución a su inquietud, ya que aqui no se conserva dicho
historial.

http://www.google.com/groups

Su amigazo:

Javier Romero


"Javier E. Romero T." escribió en el
mensaje news:%
¿Sabe qué? ... ¡Abrase!.

"Serafin Salazar" escribió en el mensaje
news:%
> 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!
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida