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.