Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

MS-SQL-Abfrage – Aktualisierungsdatensatz, der über eine gespeicherte Prozedur abgerufen wurde

versuchen Sie es mit einem einzelnen Befehl:

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) sagt das:

aber in meinen begrenzten Tests (nicht viele Zeilen in der Testtabelle) sieht es so aus, als ob es jedes Mal dieselbe Zeile aktualisiert und dass das OP versucht, jedes Mal eine andere Zeile zu aktualisieren.

Probieren Sie dies aus:

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