Theo MSDN: cú pháp cam kết là:Máy chủ SIT COMMIT không có Tran | Giao dịch?
Tuy nhiên khi tôi bỏ các tran
/transaction
lời - nó biên dịch và chạy không có lỗi.
Làm thế nào nó có thể hoạt động?
Thay vào đó, nó có làm gì khác không?
Theo MSDN: cú pháp cam kết là:Máy chủ SIT COMMIT không có Tran | Giao dịch?
Tuy nhiên khi tôi bỏ các tran
/transaction
lời - nó biên dịch và chạy không có lỗi.
Làm thế nào nó có thể hoạt động?
Thay vào đó, nó có làm gì khác không?
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
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ả ROLLBACK
và COMMIT
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
'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. –
@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
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 ? –