3
我想编写一个MERGE语句,使用ORDER BY子句从大表中选择TOP 10行,并将其更新为列值之一。 MERGE语句允许我选择TOP 10行,但无法将ORDER BY子句放在任何位置。SQL Server MERGE语句和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);
非常感谢马丁。这是一个完美的解决方案.... :) – 2012-03-05 13:00:17
在这种特定的情况下,您的解决方案是正确的。有一点需要注意的是,'MERGE'上指定的'TOP'子句是在任何行被'WHEN MATCHED \ NOT MATCHED'语句中的WHERE'子句过滤掉之后执行的。如果用户在他的'WHEN MATCHED'子句中有任何额外的过滤器,'MERGE TOP(X)'总是会影响10行(除非有少于10个可能的行更新)。您的解决方案只会影响10行,减去任何在WHEN MATCHED子句中被过滤掉的行。 – 2014-01-31 14:01:37