De acuerdo con MSDN: la sintaxis es comprometerse:Sql server COMMIT sin Tran | ¿Transacción?
Sin embargo cuando omiten lostran
/transaction
palabras - lo hace compilar y ejecutar sin errores.
¿Cómo puede estar funcionando?
¿Hace algo más?
De acuerdo con MSDN: la sintaxis es comprometerse:Sql server COMMIT sin Tran | ¿Transacción?
Sin embargo cuando omiten lostran
/transaction
palabras - lo hace compilar y ejecutar sin errores.
¿Cómo puede estar funcionando?
¿Hace algo más?
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
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
'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. –
@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
Así que si no uso ninguna transacción con nombre, siempre puedo usar Commit solo. derecho ? –