Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête MS-SQL - Mettre à jour l'enregistrement récupéré via la procédure stockée

essayez une seule commande :

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

MISE À JOUR (Transact-SQL) dit que :

mais dans mes tests limités (pas beaucoup de lignes dans la table de test), il semble qu'il mette à jour la même ligne à chaque fois, et que l'OP essaie de mettre à jour une ligne différente à chaque fois.

alors essayez ceci :

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