如何使用Sql Server 2008从顶层表中删除10条以上的记录?

时间:2016-12-21 13:31:24

标签: sql sql-server sql-delete

如果该数字超过10条记录,则旧记录清除。 这意味着,如果表中存储了15条记录,则要删除5条第一条记录。

示例:

"DELETE FROM Table WHERE ID NOT IN (SELECT ??? 10 ID FROM Table)"

1 个答案:

答案 0 :(得分:6)

在SQL Server中,您可以使用row_number()枚举值,然后使用where删除最旧的值:

with todelete as (
      select t.*, row_number() over (order by id desc) as seqnum
      from t
      )
delete from todelete
    where seqnum > 10;

您的方法也有效。你可以这样做:

delete from t
    where t.id not in (select top 10 t2.id from t t2 order by t2.id desc);

注意:这使用not in,因此它假设id永远不会NULL。在这种情况下,这似乎是合理的。