2013-03-18 30 views

Trả lời

2

Bạn không thể ROLLBACK một hoạt động không có giao dịch. Bạn có thể sử dụng implicit transactions, nhưng bạn vẫn cần gọi số COMMIT hoặc ROLLBACK một cách rõ ràng. Tuy nhiên, để kiểm soát tốt hơn, tốt nhất là nên bọc (các) câu lệnh trong một khối BEGIN TRANSACTION...COMMIT/ROLLBACK. Bằng cách này, bạn sẽ tránh được bất kỳ sự nhầm lẫn nào và nhu cầu sử dụng cài đặt IMPLICIT_TRANSACTION.

2

Bạn có thể khôi phục DELETE hoặc TRUNCATE (và hầu hết các hoạt động khác) nếu và chỉ khi chúng là một phần của giao dịch chưa được cam kết. Hoặc bạn có thể khôi phục dữ liệu đã bị xóa/cắt ngắn từ bản sao lưu.

Có một số khác biệt giữa TRUNCATE và DELETE. Đáng chú ý nhất là TRUNCATE chỉ có thể làm trống một bảng trong khi DELETE chỉ xóa các hàng bạn chỉ định. TRUNCATE deallocates và nhật ký dữ liệu ở cấp độ trang thay vì mức hàng, mà thường làm cho TRUNCATE một phương pháp hiệu quả hơn DELETE để xóa toàn bộ nội dung của một bảng.

+2

Nếu anh ta đang sử dụng ** mô hình khôi phục đầy đủ **, thì anh ta có thể quay lại cơ sở dữ liệu vào lúc này trước khi lệnh xóa được phát hành. –

3

Bạn không thể khôi phục trong trường hợp này, nhưng khi bạn đang sử dụng Mô hình khôi phục đầy đủ, thì bạn có thể chuyển cơ sở dữ liệu của mình trở lại thời điểm trước khi bạn đưa ra lệnh xóa.

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