Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL Stored Procedure Execution có phải là 'nguyên tử' không?

Điều này dành cho SQL Server.

Mỗi câu lệnh là nguyên tử, nhưng nếu bạn muốn thủ tục được lưu trữ là nguyên tử (hoặc bất kỳ chuỗi câu lệnh nào nói chung), bạn cần bao quanh các câu lệnh một cách rõ ràng bằng

BẮT ĐẦU GIAO DỊCH
Tuyên bố ...
Tuyên bố ...
GIAO DỊCH CAM KẾT

(Người ta thường dùng viết tắt là BEGIN TRAN và END TRAN.)

Tất nhiên, có rất nhiều cách để gặp rắc rối về khóa tùy thuộc vào những gì khác đang diễn ra cùng lúc, vì vậy bạn có thể cần một chiến lược để đối phó với các giao dịch thất bại. (Một cuộc thảo luận đầy đủ về tất cả các trường hợp có thể dẫn đến khóa, bất kể bạn điều khiển SP cụ thể này bằng cách nào, đều nằm ngoài phạm vi của câu hỏi.) Nhưng chúng vẫn sẽ được gửi lại vì tính nguyên tử. Và theo kinh nghiệm của tôi, bạn có thể sẽ ổn mà không cần biết về khối lượng giao dịch của bạn và các hoạt động khác trên cơ sở dữ liệu. Xin lỗi vì đã nói rõ điều đó.

Trái ngược với quan niệm sai lầm phổ biến, điều này sẽ hoạt động trong trường hợp của bạn với cài đặt mức giao dịch mặc định.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận số lượng các mục và giá trị của chúng trong một cột

  2. Làm cách nào để viết câu lệnh if else bằng ngôn ngữ biểu thức của Dịch vụ Báo cáo?

  3. Trả lại tất cả các khóa ngoại và Ràng buộc KIỂM TRA trong Cơ sở dữ liệu SQL Server (Ví dụ T-SQL)

  4. Các thủ tục được lưu trữ trong SQL không hoàn tất khi được gọi từ Python

  5. Các tính năng Dữ liệu Không gian của SQL Server 2008 có hữu ích cho việc ánh xạ các truy vấn không?