sql >> Database teknologi >  >> RDS >> Sqlserver

MS-SQL-forespørgsel - Opdateringspost hentet via Stored Procedure

prøv en enkelt 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

OPDATERING (Transact-SQL) siger at:

men i min begrænsede test (ikke mange rækker i testtabellen), ser det ud til, at den opdaterer den samme række hver gang, og at OP forsøger at opdatere en anden række hver gang.

så prøv dette:

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. NEWID() vs NEWSEQUENTIALID() i SQL Server:Hvad er forskellen?

  2. Doktrin genererer ikke begrænsninger for fremmednøgle på tværs af databaser i MySQL

  3. hvordan man itererer gennem mysql_query() resultat

  4. Hvordan kan jeg konvertere geometridata til geografidata i MS SQL Server 2008?