No creo que sea posible hacer esto declarativamente.
Si se garantiza que todas las inserciones pasarán por el procedimiento almacenado y SaleValue no se actualiza una vez insertado, entonces debería funcionar lo siguiente (inventé nombres de tablas y columnas ya que no se proporcionaron en la pregunta inicial)
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
El HOLDLOCK
proporciona semántica serializable y bloquea todo el rango que coincide con el TransactionId
y el UPDLOCK
evita que dos transacciones simultáneas bloqueen el mismo rango, lo que reduce el riesgo de interbloqueos.
Un índice en TransactionId,SaleValue
sería mejor apoyar esta consulta.