Jeg tror ikke, det er muligt at gøre dette deklarativt.
Hvis alle inserts er garanteret at gå gennem den lagrede procedure, og SaleValue ikke opdateres, når den først er indsat, burde følgende virke (jeg har lavet tabel- og kolonnenavne, da disse ikke blev angivet i det indledende spørgsmål)
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
giver serialiserbar semantik og låser hele området, der matcher TransactionId
og UPDLOCK
forhindrer to samtidige transaktioner, der låser den samme rækkevidde, hvilket reducerer risikoen for dødvande.
Et indeks på TransactionId,SaleValue
ville være bedst at understøtte denne forespørgsel.