0

我有一组相当大的数据(大约 1000 万行),其中有很多重复项。为了删除这些重复项,我使用了这个查询(从这篇文章中我知道这是最有效的):

;WITH cte
  AS (SELECT ROW_NUMBER() OVER (PARTITION BY COL1, COL2, COL3 
    ORDER BY ( SELECT 0)) RN
  FROM MYTABLE)
DELETE FROM cte
WHERE RN > 1

服务器返回此错误:

数据库“ABC”的事务日志已满。要找出日志中的空间不能被重用的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列

我怎样才能解决这个问题并删除重复的行?

4

1 回答 1

0

一个长期存在的问题。DELETE 是一个记录操作,过去的经验告诉我,当删除大量数据时,日志可能会增长到比数据文件大。一个好的解决方案,但并非在所有情况下都适用,是将要保留的数据复制到新表中,删除原始表,然后将新表重命名为原始表。显然,这必须在不使用数据库的维护期间完成。

嘿微软:不记录的 DELETE 怎么样

于 2013-04-10T06:35:43.687 回答