synthroid taking instructions

Inicio > Base de datos > Log personalizado de una transacción

Log personalizado de una transacción

miércoles, 11 de diciembre de 2024 Dejar un comentario Ir a comentarios

Tienes idea!. Las operaciones con variables de tablas no se pueden deshacer. Solo llenando tu log desde la variable de tabla puedes llenar hasta que punto se quedo tu transaccion. Por su puesto, tienes que recordar, que todas las entradas que preceden en el log al error fueron deshechas (rollbak). Si corriges el error de tiempo de ejecucion en la linea 26, la transaccion es confirmada (commit) y la vida continua.

[sql]
CREATE TABLE #log_temp
(
msg VARCHAR(255)
) –main log tbl
DECLARE @t TABLE (msg VARCHAR(255)) –our backup log
CREATE TABLE #t
(
i INT
)
BEGIN TRAN
BEGIN TRY
INSERT #t VALUES (1)
INSERT #log_temp VALUES ( ‘first’)
INSERT @t VALUES(‘first’)
INSERT #t VALUES (2)
INSERT #log_temp VALUES ( ‘second’)
INSERT @t VALUES(‘second’)
INSERT #t VALUES (3)
INSERT #log_temp VALUES ( ‘third’)
INSERT @t VALUES(‘third’)
INSERT #t VALUES (4)
INSERT #log_temp VALUES (‘fourth’)
INSERT @t VALUES(‘fourth’)
INSERT #t VALUES (5)
INSERT #log_temp VALUES (‘fifth’)
INSERT @t VALUES(‘fifth’)
INSERT #t VALUES (‘v’) –introduce a runtime error
INSERT #log_temp VALUES (‘sixth’)
INSERT @t VALUES(‘sixth’)
INSERT #t VALUES (7)
INSERT #log_temp VALUES (‘seventh’)
INSERT @t VALUES(‘seventh’)
INSERT #t VALUES (8)
INSERT #log_temp VALUES (‘eighth’)
INSERT @t VALUES(‘eighth’)
END TRY
BEGIN CATCH
SELECT *
FROM #t — data still there
ROLLBACK TRAN –clears everything including log_temp
SELECT *
FROM #log_temp –log is gone
SELECT *
FROM #t — data is gone
INSERT #log_temp
SELECT *
FROM @t –backfill the log
INSERT #log_temp VALUES(‘Rollback: ‘+error_message()) –insert the reason for rollback
END CATCH
IF @@trancount>0
COMMIT TRAN
DROP TABLE #t
SELECT *
FROM #log_temp — log is back including the last error
DROP TABLE #log_temp
[/sql]

  1. Sin comentarios aún.
  1. Sin trackbacks aún.