Nie sądzę, że można to zrobić deklaratywnie.
Jeśli wszystkie wstawki mają gwarancję przejścia przez procedurę składowaną, a wartość SaleValue nie jest aktualizowana po wstawieniu, poniższe powinny działać (wymyśliłem nazwy tabel i kolumn, ponieważ nie zostały one podane w początkowym pytaniu)
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
daje serializowalną semantykę i blokuje cały zakres pasujący do TransactionId
i UPDLOCK
zapobiega dwóm równoczesnym transakcjom blokującym ten sam zakres, zmniejszając w ten sposób ryzyko zakleszczeń.
Indeks TransactionId,SaleValue
najlepiej będzie wspierać to zapytanie.