В этом сценарии так много проблем, что я не знаю, с чего начать. Нужно иметь в виду, что вы сокращаете свои критерии вне цикла, другое - вы добавляете к своему счету, а не обновляете его в конце каждого цикла и т. Д.
Если вы просто пытаетесь вытянуть верхние 30 «whatevers» по некоторым критериям, то это может помочь избежать использования петель?
--Deselect all rows
UPDATE universe_temp SET selection_flag = @false;
--Now select the top x
WITH Ranked AS (
SELECT
*,
DENSE_RANK() OVER (ORDER BY adtv3m DESC, market_capitalization_rank DESC) AS rank_id
FROM
universe_temp)
UPDATE
r
SET
selection_flag = @true
FROM
Ranked r
WHERE
r.rank_id <= @top;
--Find the threshold (bonus)
SELECT MIN(adtv3m) FROM universe_temp WHERE selection_flag = @true;
Но я действительно понятия не имею, чего вы пытаетесь достичь здесь, как вы вносите свои данные в эту таблицу "universe_temp", что это представляет и т. Д.