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

Log personalizado de una transacción

domingo, 20 de octubre 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.

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

Comparte y diviertete:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • BlinkList
  • Blogosphere
  • Live
  • Meneame
  • MSN Reporter
  • MySpace
  • RSS
  • Suggest to Techmeme via Twitter
  • Technorati
  • LinkedIn
  • email
  • FriendFeed
  • PDF
  • Reddit
  • Wikio IT
  • Add to favorites
  • blogmarks
Top Footer