sql >> Databasteknik >  >> RDS >> Sqlserver

MS-SQL-fråga - Uppdateringspost hämtad via lagrad procedur

prova ett enda kommando:

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

UPPDATERING (Transact-SQL) säger att:

men i min begränsade testning (inte många rader i testtabellen) ser det ut som att den uppdaterar samma rad varje gång, och att OP försöker uppdatera en annan rad varje gång.

så prova detta:

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. Jämför datum i T-SQL, ignorera tidsdelen

  2. Har problem med att kombinera HAVING med WHERE på en mycket enkel QUERY

  3. Docker väntar på att postgresql ska köras

  4. hur kan jag matcha två strängar även om de är 1 tecken olika?