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

Saf*_*afa 0 sql sql-server sql-delete

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

例:

"DELETE FROM Table WHERE ID NOT IN (SELECT ??? 10 ID FROM Table)"
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 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;
Run Code Online (Sandbox Code Playgroud)

你的方法也有效.你可以做:

delete from t
    where t.id not in (select top 10 t2.id from t t2 order by t2.id desc);
Run Code Online (Sandbox Code Playgroud)

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