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