Jag tror inte att det är möjligt att göra detta deklarativt.
Om alla bilagor garanterat går igenom den lagrade proceduren och SaleValue inte uppdateras när det väl har infogats, bör följande fungera (jag skapade tabell- och kolumnnamn eftersom dessa inte angavs i den första frågan)
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
ger serialiserbar semantik och låser hela intervallet som matchar TransactionId
och UPDLOCK
förhindrar två samtidiga transaktioner som låser samma intervall, vilket minskar risken för dödlägen.
Ett index på TransactionId,SaleValue
skulle vara bäst att stödja denna fråga.