sql >> Database >  >> RDS >> Sqlserver

MS-SQL-query - Updaterecord opgehaald via opgeslagen procedure

probeer een enkel commando:

CREATE PROCEDURE dbo.getNewAds
(
@region  --lazy, declare type!!
)
AS
BEGIN
    UPDATE TOP (1) Adverts
        SET adShown = adShown + 1
        OUTPUT INSERTED.ID
        WHERE adRegion = @region
END

UPDATE (Transact-SQL) zegt dat:

maar in mijn beperkte tests (niet veel rijen in de testtabel), lijkt het alsof elke keer dezelfde rij wordt bijgewerkt en dat de OP elke keer een andere rij probeert bij te werken.

dus probeer dit:

CREATE PROCEDURE dbo.getNewAds
(
@region  --lazy, declare type!!
)
AS
BEGIN
    DECLARE @ID int

    --select row to update
    SELECT TOP 1 
        @ID=Id 
        FROM Adverts
        WHERE adRegion = @region
        ORDER BY NEWID()


    --update and return result set in one command
    UPDATE TOP (1) Adverts
        SET adShown = adShown + 1
        OUTPUT INSERTED.ID
        WHERE [email protected]
END


  1. Wanneer cursors te sluiten met MySQLdb

  2. LINQ meerdere joins met meerdere voorwaarden

  3. MySQL-fout 1093 - Kan de doeltabel voor update niet specificeren in de FROM-clausule

  4. Welsprekende groep Door SQLSTATE [42000] te maken met geldige SQL-query in Laravel 5.3