Saya rasa tidak mungkin melakukan ini secara deklaratif.
Jika semua sisipan dijamin melalui prosedur tersimpan dan SaleValue tidak diperbarui setelah dimasukkan, maka yang berikut ini akan berfungsi (saya membuat nama tabel dan kolom karena ini tidak disediakan dalam pertanyaan awal)
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
memberikan semantik serial dan mengunci seluruh rentang yang cocok dengan TransactionId
dan UPDLOCK
mencegah dua transaksi bersamaan mengunci rentang yang sama sehingga mengurangi risiko kebuntuan.
Indeks di TransactionId,SaleValue
sebaiknya mendukung kueri ini.