Оператор SQL Server MERGE и предложение ORDER BY - PullRequest
4 голосов
/ 05 марта 2012

Я хотел бы написать оператор 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 Ответ

8 голосов
/ 05 марта 2012

Вы можете использовать табличное выражение как источник и цель для 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;
...