Вам необходимо отделить выбор данных от извлечения этих данных в переменную.Вы можете использовать, например, CTE (Common Table Expression) для настройки данных, а затем работать с этими данными.Однако на более простом уровне: почему вы назначаете id
на @resultId
пять раз?Кажется, вы пока ничего не делаете с @resultId
.....
Не могли бы вы изменить свою логику, чтобы она была в большей степени основана на множестве?Вместо конструкции WHILE
- просто выберите соответствующие значения из CTE:
;WITH VideoData AS
(
SELECT
video.id,
ROW_NUMBER() OVER (ORDER BY dateAdded DESC) AS ROWID
FROM
videoTest.dbo.video
LEFT JOIN
videoTest.dbo.aspnet_Users ON video.userId = aspnet_Users.UserId
WHERE
aspnet_Users.UserName = @searchUserName
)
SELECT id, ROWID
FROM VideoData
WHERE ROWID <= 5
Обновление: , если вам нужно пять значений video.id
для последующей обработки, попробуйте что-то вродеэто:
DECLARE @VideoIDs TABLE (VideoID INT)
;WITH VideoData AS
(
... (same as before)
)
INSERT INTO @VideoIDs(VideoID)
SELECT id
FROM VideoData
WHERE ROWID <= 5
-- use your values in the table variable here.....