WITH cte AS (
SELECT TOP (@TopType)
AdvertID, IsAdvertImage, AdvertData, Views
FROM Adverts
WHERE AdvertSize = @AdvertSize
ORDER BY NEWID())
UPDATE cte
SET Views = Views + 1
OUTPUT INSERTED.AdvertID
, INSERTED.IsAdvertImage
, INSERTED.AdvertData;
Но ORDER BY NEWID () будет работать ужасно. Даже с TOP (1) все равно приходится сканировать всю таблицу, буферизовать выбранные столбцы в базе данных tempdb, отсортировать взятие TOP из этого. А также будет конфликт конфликта обновлений между Views = Views + 1 X-lock и S-замками с полной проверкой ...