एक ही आदेश का प्रयास करें:
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
अपडेट (ट्रांजैक्ट-एसक्यूएल) कहते हैं कि:
लेकिन मेरे सीमित परीक्षण में (परीक्षण तालिका में कई पंक्तियाँ नहीं), ऐसा लगता है कि यह हर बार एक ही पंक्ति को अपडेट करता है, और यह कि ओपी हर बार एक अलग पंक्ति को अपडेट करने का प्रयास कर रहा है।
तो इसे आजमाएं:
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