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