try transacciones sistema que procedimientos procedimiento example error begin almacenados almacenado sql sql-server stored-procedures triggers atomic

transacciones - ¿Es una llamada a procedimiento almacenado dentro de un desencadenador de SQL Server implícitamente segura y atómica?



sql server @@ error example (1)

La operación subyacente y la operación desencadenante se tratan como atómicas. Ambos se comprometen en una transacción. De la documentación :

El desencadenante y la declaración que lo desencadena se tratan como una transacción única ...

Tenga en cuenta que el desencadenador (y el SP llamará) no verá el cambio de tabla que activó el desencadenador. No se ha comprometido todavía.

Tengo un disparador de SQL Server. Para ser sincero, no estoy seguro si los desencadenantes siguen implícitamente a ACID ( Atomicity, Consistency, Isolation, Durability ), pero mi desencadenante, por el momento, no hace nada particularmente complejo.

Ahora, quiero llamar a un procedimiento almacenado desde el disparador. Tengo TRANSACTION rodeando la llamada al procedimiento almacenado y una INSERT .

Mi pregunta es: si un desencadenador, sin una llamada a procedimiento almacenado, es seguro para hilos y atómico, al menos en parte debido a la TRANSACTION , ¿la llamada al procedimiento almacenado será implícitamente segura y atómica?

Esto es lo que parece el gatillo:

CREATE TRIGGER [triggerInsert_Foobar] ON [Foobar] INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON; -- Turns on rollack if T-SQL statement raises a run-time error SET XACT_ABORT ON -- Start new transaction BEGIN TRANSACTION -- Insert statement for trigger INSERT INTO Foo ( Col1, Col2 ) SELECT RTRIM ( LTRIM ( Col1 ) ), Col2 FROM INSERTED -- Call stored procedure (takes no parameters) EXECUTE sp_executesql N''FoobarApp_DoSomething'' -- Complete transaction COMMIT TRANSACTION END;

Gracias, amablemente, por su ayuda.

Pregunta adicional

Esta pregunta se está preparando después de algunas respuestas ya (gracias). Me disculpo de antemano.

¿Mi desencadenante y la posterior llamada del procedimiento almacenado siguen el principio ACID y evitan las condiciones de carrera y los puntos muertos? O, ¿hay algo que deba agregar a mi desencadenante y / o al procedimiento almacenado para salvaguardar contra las condiciones de carrera y los bloqueos?