我已经通过使用此查询在我继承的表上识别出数百万个重复的行:
SELECT COUNT(*) AS NumRecords, AccessID, LEFT(SQLTEXT, 5000)
FROM Table
WHERE AccessID=5012
GROUP BY AccessID, LEFT(SQLTEXT, 5000)
HAVING COUNT(*)>1;
我可以在表上使用的唯一索引是 AccessRequestID 字段 - SQLText 字段是 VARCHAR(MAX),这里有超过 1 亿条记录,因为有一个 varchar(MAX) 列,所以表是巨大的,需要永远做任何事情和。如何将该 Select 语句转换为删除以删除重复的记录?我试图弄清楚如何使用 Partition Rownum 编写 CTE,但我对此没有信心。我的想法是将它放在一个以 AccessID 1 开始的循环中,然后递增 1 直到表的末尾(只有 5012 个唯一的 accessID)因为我将通过 NC 索引过滤位置,希望它会更快.
也许您可以尝试将有效行插入新表,然后用新表替换旧表。