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 TransactionId
và UPDLOCK
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.