删除每第n行SQL

Ric*_*ard 13 sql t-sql database sql-server

假设我有一个1000行的表(id int,Name varchar).现在我希望删除每个第n条记录(每隔2,3或5).最有效的方法是什么?

OMG*_*ies 26

对于SQL Server 2005+

每隔第二排

WITH example AS (
    SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) AS rank
       FROM TABLE t)
DELETE example
   WHERE rank%2 = 0
Run Code Online (Sandbox Code Playgroud)

对于每第3行,将WHERE子句更改为:

WHERE rank%3 = 0
Run Code Online (Sandbox Code Playgroud)

每隔五行anf:

WHERE rank%5 = 0
Run Code Online (Sandbox Code Playgroud)

这使用模数,它返回除法的余数.如果余数为零,则除以的值是除数的倍数.