2012-02-13 12 views

Respuesta

7

El COMMIT en cuestión no es en realidad COMPROMETE usted piensa. Ver COMMIT WORK

COMMIT [TRABAJO] [; ]

Observaciones

Esta declaración funciona idénticamente a cometer de transacción, salvo COMMIT TRANSACTION acepta un nombre de transacción definida por el usuario. Esta sintaxis COMMIT, con o sin especificar la palabra clave opcional WORK, es compatible con SQL-92.

Así COMMIT por sí mismo es COMMIT WORK que es idéntica a COMMIT TRANSACTION.
Lo mismo ocurre con ROLLBACK [ WORK ]

Después del comentario,

BEGIN TRANSACTION gbn 
SELECT 1 
COMMIT gbn -- fail 
GO 
BEGIN TRANSACTION gbn 
SELECT 2 
COMMIT TRAN gbn -- works 
GO 
+0

'excepto que COMMIT TRANSACTION acepta un nombre de transacción definido por el usuario' .... pero no le proporcioné el nombre de la transacción ... ese es el problema. + No estoy hablando de la palabra clave 'WORK'. estoy hablando de commit vs commit trans. –

+0

@Royi Namir: no, COMPROMETER por sí mismo significa COMPROMETER EL TRABAJO. Nada que ver con una transacción con nombre: si lo nombró, no lo mencionó en su pregunta. Y con un nombre, tendría que usar explícitamente 'COMMIT TRANSACTION SomeName' o' COMMIT TRAN SomeName'. * No * COMPROMETE por sí mismo – gbn

+0

Así que si no uso ninguna transacción con nombre, siempre puedo usar Commit solo. derecho ? –

0

IF @@TRANCOUNT > 0 objetivos comprobar que hay (al menos) una transacción pendiente - Si es necesario utilizar tanto con ROLLBACK y COMMIT como la ejecución de estas instrucciones sin tener ninguna transacción abierta generará un error

Cuestiones relacionadas