Не мисля, че е възможно това да се направи декларативно.
Ако е гарантирано, че всички вмъквания преминават през съхранената процедура и SaleValue не се актуализира, след като бъде вмъкната, тогава следващото трябва да работи (измислих имена на таблици и колони, тъй като те не бяха предоставени в първоначалния въпрос)
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
дава сериализираща семантика и заключва целия диапазон, съответстващ на TransactionId
и UPDLOCK
предотвратява две едновременни транзакции, заключващи един и същи диапазон, като по този начин намалява риска от блокиране.
Индекс на TransactionId,SaleValue
би било най-добре да подкрепите тази заявка.