Оператор SQL Server MERGE и предложение ORDER BY

Я хотел бы написать оператор MERGE, чтобы выбрать ТОП 10 строк из большой таблицы с помощью предложения ORDER BY и обновить его одно из значений столбца. Оператор MERGE позволяет мне выбрать ТОП-10 строк, но я нигде не смог поместить предложение ORDER BY.

MERGE TOP(10) StudentAllocation AS SA
USING (SELECT @sub_id AS subId) AS TSA ON SA.sub_id = TSA.subId
WHEN MATCHED THEN 
       UPDATE SET SA.exam_batch = 1);

1 ответ

Решение

Вы можете использовать табличное выражение как источник и цель для MERGE,

WITH SA AS
(
SELECT TOP(10) sub_id,
               exam_batch 
FROM StudentAllocation 
ORDER BY sub_id
)
MERGE SA
USING (SELECT @sub_id AS subId) AS TSA ON SA.sub_id = TSA.subId
WHEN MATCHED THEN 
       UPDATE SET SA.exam_batch = 1;

хотя это может быть проще в использовании

WITH SA AS
(
SELECT TOP(10) sub_id,
               exam_batch 
FROM StudentAllocation 
ORDER BY sub_id
)
UPDATE SA
SET exam_batch = 1
WHERE sub_id = @sub_id;
Другие вопросы по тегам