2012-02-13 2 views

risposta

7

L'IMPEGNO in questione non è effettivamente COMMIT che si pensa. Vedi COMMIT WORK

COMMIT [LAVORO] [; ]

Osservazioni

Questa affermazione funzioni in modo identico a commettere operazione tranne COMMIT TRANSACTION accetta un nome di transazione definita dall'utente. Questa sintassi COMMIT, con o senza la specifica parola chiave WORK, è compatibile con SQL-92.

Così COMMIT per sé è COMMIT WORK che è identico al COMMIT TRANSACTION.
Idem per ROLLBACK [ WORK ]

Dopo commento,

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

'tranne COMMIT TRANSACTION accetta un nome transazione definito dall'utente' .... ma non gli ho dato il nome della Transazione ... questo è il problema. + Non sto parlando della parola chiave 'WORK'. Sto parlando di commit vs commit trans. –

+0

@Royi Namir: no, COMMIT significa da solo COMMIT WORK. Niente a che vedere con una transazione con nome: se lo hai nominato, non lo hai menzionato nella tua domanda. E con un nome, dovresti usare esplicitamente 'COMMIT TRANSACTION SomeName' o' COMMIT TRAN SomeName'. * Non * COMMIT di per sé – gbn

+0

Quindi, se non utilizzo alcuna transazione denominata, posso sempre usare Commit da solo. destra ? –

0

IF @@TRANCOUNT > 0 obiettivi controllando c'è (almeno) uno in attesa di operazione - se deve essere utilizzato sia con ROLLBACK e COMMIT come l'esecuzione di queste istruzioni senza avere alcuna transazione aperta genererà un errore