Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta MS-SQL - Atualizar registro recuperado por procedimento armazenado


tente um único comando:
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) diz que:

mas no meu teste limitado (não há muitas linhas na tabela de teste), parece que atualiza a mesma linha todas as vezes e que o OP está tentando atualizar uma linha diferente a cada vez.

então tente isso:
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