coba satu perintah:
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
PERBARUI (Transact-SQL) mengatakan bahwa:
tetapi dalam pengujian terbatas saya (tidak banyak baris dalam tabel pengujian), sepertinya ia memperbarui baris yang sama setiap kali, dan OP mencoba memperbarui baris yang berbeda setiap kali.
jadi coba ini:
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