Non credo sia possibile farlo in modo dichiarativo.
Se è garantito che tutti gli inserimenti passino attraverso la procedura memorizzata e SaleValue non viene aggiornato una volta inserito, allora dovrebbe funzionare quanto segue (ho creato nomi di tabelle e colonne poiché non sono stati forniti nella domanda iniziale)
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
Il HOLDLOCK
fornisce una semantica serializzabile e blocca l'intero intervallo che corrisponde a TransactionId
e il UPDLOCK
impedisce che due transazioni simultanee blocchino lo stesso intervallo riducendo così il rischio di deadlock.
Un indice su TransactionId,SaleValue
sarebbe meglio supportare questa query.