probeer een enkel commando:
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) zegt dat:
maar in mijn beperkte tests (niet veel rijen in de testtabel), lijkt het alsof elke keer dezelfde rij wordt bijgewerkt en dat de OP elke keer een andere rij probeert bij te werken.
dus probeer dit:
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