with vincular vinculados vinculado ver servidores servidor los entre eliminar consulta como comando sql-server database multithreading concurrency triggers

sql-server - vinculados - vincular 2 servidores sql server 2014



La base de datos SQL desencadena el hilo seguro? (2)

Los desencadenantes no tienen propiedades especiales con respecto a la concurrencia. Se ejecutan como si hubiera ejecutado manualmente ese código.

Su desencadenador es seguro porque todas las filas que usted lee y escribe ya han sido bloqueadas por X mediante el DML desencadenante.

Me he estado preguntando sobre la semántica de concurrencia con respecto a los desencadenadores de la base de datos de SQL Server. Tengo un disparador de base de datos que se ejecuta después de una actualización en una tabla. El disparador establece una columna ''dateModified'' a la hora actual. Esto me permite saber siempre que la actualización más reciente de la tabla ocurrió en X veces. A continuación se muestra cómo se vería:

ALTER TRIGGER base.TR_myTrigger ON base.myTable AFTER INSERT, UPDATE AS BEGIN DECLARE @dateModified AS DATETIMEOFFSET SET @dateModified = SYSDATETIMEOFFSET() UPDATE base.myTable Set dateModified = @dateModified WHERE id in (SELECT DISTINCT(id) FROM inserted) END

En mi caso, la tabla se puede actualizar en cualquier momento por cualquier cantidad de subprocesos. ¿Este disparador es seguro dentro de un contexto de subprocesos múltiples? Si el hilo A actualiza la tabla, y el hilo B lee de él inmediatamente después, ¿B verá un estado de la tabla con las actualizaciones de A pero no las actualizaciones del activador también? ¿O los desencadenantes protegen la mesa de la lectura hasta que se hayan realizado todas las acciones + sus desencadenantes?

Se agradecerá cualquier idea sobre qué está sucediendo exactamente bajo los desencadenantes de la base de datos SQL. ¡Gracias!


Si el hilo A actualiza la tabla, y el hilo B lee de él inmediatamente después, ¿B verá un estado de la tabla con las actualizaciones de A pero no las actualizaciones del activador también? ¿O los desencadenantes protegen la mesa de la lectura hasta que se hayan realizado todas las acciones + sus desencadenantes?

A qué se reduce esto es a: ¿la operación subyacente y la operación desencadenante se tratan como una unidad atómica o están separadas? La respuesta es: atómica. Es decir, nunca verá los resultados de la inserción o actualización (en su caso) y no verá la columna dateModified que se trata a través del desencadenador. Es decir, 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 ...