Chúng tôi có thể sử dụng GO
lần mutiple tuyên bố trong một SQL Transaction
. Tôi đang có một kịch bản T-SQL dài và tôi muốn chạy nó trong một SQL Transaction
. Nếu mọi việc suôn sẻ thì tôi sẽ cam kết ngược lại.Chúng ta có thể sử dụng 'GO' nhiều lần trong Giao dịch SQL không?
Nhưng, khi chạy truy vấn đó, tôi gặp lỗi như 'create function must be the only statement in the batch'
. Khi tôi đang tạo và bỏ nhiều chức năng và thủ tục trong đó.
Tôi chưa sử dụng GO
ở bất kỳ đâu trong tập lệnh. Câu hỏi của tôi là - Tôi có thể sử dụng nhiều câu lệnh GO
trong tập lệnh dài đó không. Bởi vì, GO
tạo một lô và nếu lô thực thi thành công lần đầu tiên nhưng không thành công vào lần tiếp theo thì câu lệnh rollback transaction
có thể thực sự khôi phục đã được thực thi không?
Cấu trúc kịch bản của tôi trông giống như:
PRINT 'Transaction Started'
BEGIN TRY
BEGIN TRAN
Drop Function
....
....
Create Function
....
....
Drop Procedure
....
....
Lots of statements
....
....
COMMIT TRAN
PRINT 'Transaction Succeeded'
END TRY
BEGIN CATCH
PRINT 'Transaction Failed'
IF(@@TRANCOUNT > 0)
ROLLBACK TRAN
END CATCH
tôi đang tạo ra kịch bản này để di chuyển một số thay đổi từ newdb để oldDB trong một kịch bản duy nhất.
Bạn tạo ra một thủ tục lưu trữ hoặc chức năng trong kịch bản này? – Dane
Tôi đã cập nhật câu trả lời của mình. Dù sao..Tôi đang tạo và thả cả hai. Đầu tiên kiểm tra xem chúng có tồn tại hay không. –
Hãy thử câu trả lời này tại đây: http://stackoverflow.com/a/11121382/249813 – JamesT