utiliza que para instalar funciona define datos concepto como sql-server transactions

sql-server - que - sql server define



Plantilla básica para transacciones en sqlserver (4)

Esto revertirá automáticamente la transacción en caso de error

SET XACT_ABORT ON BEGIN TRANSACTION -- CODE HERE COMMIT TRANSACTION

Si simplemente envuelvo mi consulta con:

BEGIN TRANSACTION COMMIT TRANSACTION

Si algo falla dentro de eso, ¿se revertirá automáticamente?

Al mirar otro código, parecen verificar si hay un error, si hay un error, entonces hacen una instrucción GOTO que luego llama a ROLLBACK TRANSACTION

Pero parece mucho trabajo, tener que verificar si IF (@@ ERROR <> 0) después de cada inserción / actualización.


Normalmente hago algo como esto dentro de mis procedimientos almacenados. Mantiene las cosas buenas y seguras, y transmite cualquier error que encuentre.

SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; -- Code goes here COMMIT TRANSACTION; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; DECLARE @ERROR_SEVERITY INT, @ERROR_STATE INT, @ERROR_NUMBER INT, @ERROR_LINE INT, @ERROR_MESSAGE NVARCHAR(4000); SELECT @ERROR_SEVERITY = ERROR_SEVERITY(), @ERROR_STATE = ERROR_STATE(), @ERROR_NUMBER = ERROR_NUMBER(), @ERROR_LINE = ERROR_LINE(), @ERROR_MESSAGE = ERROR_MESSAGE(); RAISERROR(''Msg %d, Line %d, :%s'', @ERROR_SEVERITY, @ERROR_STATE, @ERROR_NUMBER, @ERROR_LINE, @ERROR_MESSAGE); END CATCH


Para el control de transacciones, usa comenzar, confirmar y deshacer. Comienza una transacción suministrando BEGIN TRANSACTION. A continuación, coloca las diversas instrucciones SQL que necesita. Luego finaliza la transacción emitiendo una confirmación o una reversión. COMMIT TRANSACTION comprometerá todos los cambios que realizó en la base de datos después de la declaración BEGIN y los convertirá en permanentes, por así decirlo. ROLLBACK TRANSACTION revertirá todos los cambios que haya realizado en la base de datos después de la instrucción BEGIN. Sin embargo, no cambiará los valores de las variables.

Ejemplo:

BEGIN TRANSACTION UPDATE table SET column = ''ABC'' WHERE column = ''123'' COMMIT TRANSACTION --//column now has a value of ''ABC'' BEGIN TRANSACTION UPDATE table SET column = ''ABC'' WHERE column = ''123'' ROLLBACK TRANSACTION --//column still has it''s previous value (''123'') No changes were made.


sí, es importante revertir explícitamente la transacción en caso de que no funcione.

Normalmente le digo a mi hijo que solo tiene que cepillarse los dientes que desea conservar.

En este caso, solo necesita deshacer los comandos que no desea ejecutar.