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

SQL Server - Chèn đồng thời vào bảng từ nhiều máy khách - Kiểm tra Giới hạn và Chặn

Tôi không nghĩ rằng có thể làm điều này một cách khai báo.

Nếu tất cả các phần chèn được đảm bảo thực hiện theo quy trình được lưu trữ và SaleValue không được cập nhật sau khi được chèn thì phần sau sẽ hoạt động (tôi đã tạo tên bảng và cột vì chúng không được cung cấp trong câu hỏi đầu tiên)

DECLARE @SumSaleValue MONEY

BEGIN TRAN

SELECT @SumSaleValue = SUM(SaleValue)
FROM dbo.Orders WITH (UPDLOCK, HOLDLOCK)
WHERE TransactionId = @TransactionId

IF @SumSaleValue > 1000
    BEGIN
    RAISERROR('Cannot do insert as total would exceed order limit',16,1);
    ROLLBACK;
    RETURN;
    END

/*Code for INSERT goes here*/

COMMIT

HOLDLOCK cung cấp ngữ nghĩa có thể tuần tự hóa và khóa toàn bộ phạm vi khớp với TransactionIdUPDLOCK ngăn chặn hai giao dịch đồng thời khóa cùng một phạm vi, do đó giảm nguy cơ bế tắc.

Chỉ mục trên TransactionId,SaleValue sẽ là tốt nhất để hỗ trợ truy vấn này.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các thay đổi cột chỉ siêu dữ liệu mới trong SQL Server 2016

  2. Driver.getConnection bị treo khi sử dụng trình điều khiển SQLServer và Java 1.6.0_29

  3. Hàm tính giá trị trung bình trong SQL Server

  4. Chèn một chuỗi với các số 0 ở đầu để nó dài 3 ký tự trong SQL Server 2008

  5. Cách khắc phục “Chuyển đổi không thành công khi chuyển đổi giá trị thành kiểu dữ liệu” trong SQL Server