2011-02-25 20 views
11

No puedo probarlo y obtener la solución por mi cuenta en este momento, y no encontré la información en MSDN ni en Google.¿Es necesario encapsular una única instrucción de combinación (con inserción, eliminación y actualización) en una transacción?

fui interrogado si una declaración de combinación que se inserta, elimina y actualiza los registros en una tabla dada necesita ser encapsulada en una transacción (si ocurre un fallo después de que las inserciones se realizan, durante las actualizaciones, por ejemplo), o en su caso de las operaciones falla la fusión completa también falla.

Tal vez no sería dañino si incluimos una transacción, pero por curiosidad, deseamos saber más acerca de la fusión interna.

Respuesta

20

Cualquier declaración en SQL Server es una transacción por sí misma.

Es decir, que es atómica: todo lo que tiene éxito o falla todo lo

una transacción explícita sería utilizado para múltiples sentencias atómicas solo grupo en una transacción atómica grande.

Esto es belleza de MERGE: no hay necesidad de una transacción explícita y 3 declaraciones separadas.

2

Todas las instrucciones DML en SQL Server se ejecutan en una transacción implícita si no se inicia un explícito. Por supuesto, aún puede envolverlo en su propia transacción explícita, pero no debería ser necesario

0

Cada consulta se ejecuta en una transacción, siempre. Si no crea una transacción, la consulta misma tiene su propia transacción. Si algo sale mal, la consulta completa se revierte.

Si desea hacer un poco más de manejo de errores, es posible que desee una transacción al respecto, pero no es necesario para la coherencia de la base de datos.

Cuestiones relacionadas