hãy thử một lệnh duy nhất:
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
CẬP NHẬT (Giao dịch-SQL) nói rằng:
nhưng trong thử nghiệm giới hạn của tôi (không có nhiều hàng trong bảng thử nghiệm), có vẻ như nó cập nhật cùng một hàng mỗi lần và OP đang cố gắng cập nhật một hàng khác nhau mỗi lần.
vì vậy hãy thử cái này:
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