sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server - Samtidige indsættelser til tabellen fra flere klienter - Check Limit og Block

Jeg tror ikke, det er muligt at gøre dette deklarativt.

Hvis alle inserts er garanteret at gå gennem den lagrede procedure, og SaleValue ikke opdateres, når den først er indsat, burde følgende virke (jeg har lavet tabel- og kolonnenavne, da disse ikke blev angivet i det indledende spørgsmål)

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 giver serialiserbar semantik og låser hele området, der matcher TransactionId og UPDLOCK forhindrer to samtidige transaktioner, der låser den samme rækkevidde, hvilket reducerer risikoen for dødvande.

Et indeks på TransactionId,SaleValue ville være bedst at understøtte denne forespørgsel.




  1. Hvordan kan jeg opnå initcap-funktionalitet i MySQL?

  2. Skal sende meddelelse i en batch på 1000

  3. Liste antallet af duplikerede værdier

  4. Forespørgsel returnerer ikke resultater som forventet