Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie MS-SQL — aktualizacja rekordu pobranego za pomocą procedury przechowywanej

wypróbuj jedno polecenie:

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

AKTUALIZACJA (Transact-SQL) mówi, że:

ale w moich ograniczonych testach (niewiele wierszy w tabeli testowej) wygląda na to, że za każdym razem aktualizuje ten sam wiersz i że OP próbuje za każdym razem aktualizować inny wiersz.

więc spróbuj tego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL Wybierz wiersz Min i Maks podczas grupowania

  2. MONTH() Przykłady w SQL Server (T-SQL)

  3. Łączenie wielu tabel w SQL

  4. Zawijaj tekst w serwerze SQL za pomocą funkcji

  5. Jak wykluczyć rekordy z określonymi wartościami w sql select