¿Cómo se establece el compromiso automático en una sesión de SQL Server?
-
11-09-2019 - |
Pregunta
¿Cómo se establece el compromiso automático en una sesión de SQL Server?
Solución
Puede activar la confirmación automática SOBRE estableciendo implicit_transactions OFF:
SET IMPLICIT_TRANSACTIONS OFF
Cuando el ajuste está en ON, se vuelve al modo de transacción implícita. En el modo de transacción implícita, cada cambio que haga comienza a las transacciones que usted tiene que comprometerse de forma manual.
Tal vez un ejemplo es más clara. Esto escribirá un cambio en la base de datos:
SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION
Esto no escribirá un cambio en la base de datos:
SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
En el siguiente ejemplo se actualizará una fila, y luego se quejan de que no hay ninguna transacción para cometer:
SET IMPLICIT_TRANSACTIONS OFF
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
Al igual que Mitch Trigo dijo, el compromiso automático es el valor predeterminado para SQL Server 2000 en adelante.
Otros consejos
Yo quería una manera más permanente y más rápido. Porque tiendo a olvidar añadir líneas adicionales antes de escribir mi actualización real / Insertar consultas.
Lo hice por el control de SET IMPLICIT_TRANSACTIONS casilla de verificación de opciones. Para navegar a Opciones Seleccione Herramientas> Opciones> ejecución de la consulta> SQL Server> ANSI en su Microsoft SQL Server Management Studio.
Sólo asegúrese de ejecutar commit
o rollback
después de haber terminado ejecutando sus consultas. De lo contrario, la tabla que habría ejecutar la consulta será bloqueada por los demás.
confirmación automática es el modo de gestión de transacciones predeterminado de SQL Server. (SQL 2000 en adelante)
Con SQL Server 2005 Express, lo que encontré fue que incluso con la confirmación automática , inserciones en una tabla db se cometieron sin mi realidad la emisión de una orden de confirmación desde la sesión de estudio de la gerencia. La única diferencia era que cuando de confirmación automática estaba fuera, podría hacer retroceder todas las inserciones; con * de confirmación automática , que no podía. * En realidad, yo estaba equivocado. Con el modo de confirmación automática fuera, veo los cambios sólo en la ventana de control de calidad (Analizador de consultas) a partir del cual se emitieron las órdenes. Si me pasó una nueva (Analizador de consultas) ventana de control de calidad, no veo los cambios realizados por la primera ventana (sesión), es decir, no están comprometidos! Tenía que emitir compromiso explícito o comandos de reversión de hacer cambios visibles para otras sesiones (ventanas QA) - mi mal! Las cosas están funcionando correctamente.