Control de error

16/02/2005 - 17:36 por Matias Espinoza | Informe spam
Hola como estan espero que bien, bueno trabajo con sqlserver 2000 y me paso
algo super extraño.

Resulta que estaba haciendo un sp que tiene dos insert a tablas distintas y
el control de errores lo hago de esta manera
(if @@error<>0 goto error)
:error
rollback


y resulta que en el insert de la segunda tabla me equivoque en el nombre de
la tabla y al probarlo me dicuenta que insertaba igual los datos de la
primera tabla y en la segunda como el nombre esta mal escrito no existe y se
cae y deja la transaccion abierta.

alguien sabe porque ocurre esto

Preguntas similare

Leer las respuestas

#1 Maxi
16/02/2005 - 16:53 | Informe spam
Hola, podrias postiar cmo esta el resto del codgo?

lo que no veo ahi es que hagas un return distinto de 0 para salir del SP


Salu2
Maxi


"Matias Espinoza" escribió en el mensaje
news:%
Hola como estan espero que bien, bueno trabajo con sqlserver 2000 y me
paso
algo super extraño.

Resulta que estaba haciendo un sp que tiene dos insert a tablas distintas
y
el control de errores lo hago de esta manera
(if @@error<>0 goto error)
:error
rollback


y resulta que en el insert de la segunda tabla me equivoque en el nombre
de
la tabla y al probarlo me dicuenta que insertaba igual los datos de la
primera tabla y en la segunda como el nombre esta mal escrito no existe y
se
cae y deja la transaccion abierta.

alguien sabe porque ocurre esto



Respuesta Responder a este mensaje
#2 Alejandro Mesa
16/02/2005 - 17:25 | Informe spam
Matias,

Ese tipo de error no se puede atrapar en el mismo batch porque tiende a
terminarlo en cuanto ocurre. Puedes crear un segundo sp (procedimiento
almacenado)para envolver esta accion y llamarlo desde tu sp.

Ejemplo:

use northwind
go

create table t (colA int)
go

create procedure proc1
as
set nocount on

begin transaction
insert into t values(1)

if @@error != 0 goto fail

insert into t1 values(0)

if @@error != 0 goto fail

succeed:
commit transaction
return @@error

fail:
rollback transaction
return -1
go

create procedure proc2
as
set nocount on

declare @rv int
declare @error int
declare @trancnt int

set @rv = -1
set @trancnt = @@trancount

execute @rv = proc1

set @error = coalesce(nullif(@rv, 0), @@error)

if @error != 0
if @@trancount > @trancnt
begin
rollback transaction
end

return 0
go

execute proc2
go

select * from t
go

drop procedure proc2, proc1
go

drop table t
go


AMB


"Matias Espinoza" wrote:

Hola como estan espero que bien, bueno trabajo con sqlserver 2000 y me paso
algo super extraño.

Resulta que estaba haciendo un sp que tiene dos insert a tablas distintas y
el control de errores lo hago de esta manera
(if @@error<>0 goto error)
:error
rollback


y resulta que en el insert de la segunda tabla me equivoque en el nombre de
la tabla y al probarlo me dicuenta que insertaba igual los datos de la
primera tabla y en la segunda como el nombre esta mal escrito no existe y se
cae y deja la transaccion abierta.

alguien sabe porque ocurre esto




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