2012-02-13 16 views

Trả lời

7

COMMIT được đề cập không thực sự là COMMIT mà bạn nghĩ. Xem COMMIT WORK

COMMIT [WORK] [; ]

chú

Tuyên bố này chức năng giống hệt với COMMIT GIAO DỊCH, trừ COMMIT GIAO DỊCH chấp nhận một tên giao dịch người dùng định nghĩa. Cú pháp COMMIT này, có hoặc không có chỉ định từ khóa tùy chọn WORK, tương thích với SQL-92.

Vì vậy, COMMIT là chính nó là COMMIT WORK giống hệt với COMMIT TRANSACTION.
Ditto cho ROLLBACK [ WORK ]

Sau khi bình luận,

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

'ngoại trừ COMMIT TRANSACTION chấp nhận tên giao dịch do người dùng xác định' .... nhưng tôi không cung cấp cho anh ta tên của Giao dịch ... đó là vấn đề. + Im không nói về từ khóa 'WORK'. im nói về cam kết vs cam kết trans. –

+0

@Royi Namir: không, COMMIT có nghĩa là COMMIT WORK. Không có gì để làm với một giao dịch được đặt tên: nếu bạn đã đặt tên cho nó, bạn không đề cập đến điều đó trong câu hỏi của bạn. Và với một tên, bạn phải sử dụng một cách rõ ràng 'COMMIT TRANSACTION SomeName' hoặc' COMMIT TRAN SomeName'. * Không * COMMIT bởi chính nó – gbn

+0

Vì vậy, nếu tôi không sử dụng bất kỳ giao dịch có tên tôi luôn có thể sử dụng Commit một mình. đúng ? –

0

IF @@TRANCOUNT > 0 mục đích kiểm tra có (ít nhất) một lần giao dịch cấp phát - nếu phải được sử dụng với cả ROLLBACKCOMMIT như thực hiện các hướng dẫn mà không có bất kỳ giao dịch mở sẽ tạo ra lỗi

Các vấn đề liên quan