仅删除顶行.SQL Server

nic*_*App 2 sql sql-server

如何仅删除SQL Server中表的顶行?

我做了:

set rowcount 1;
delete * from table;
set rowcount 0;
Run Code Online (Sandbox Code Playgroud)

但我不确定它是否是一个很好的方法.

有没有更好的方法来实现这一目标?

Jus*_*ant 6

更新:哎呀!@gbn是对的,我的ORDER BY样本被打破了!使用正确的代码示例更新.

在最常见的情况下,"top"基于特定列或列中的值的顺序,您可以使用CTE和ROW_NUMBER来模拟有序的TOP:

WITH cte AS
(
  SELECT *, ROW_NUMBER() OVER(ORDER BY SomeColumn, OtherColumn) AS RowNum
  FROM table
)
DELETE FROM cte
WHERE RowNum <= 1;
Run Code Online (Sandbox Code Playgroud)

有关此建议模式的更多信息,请参阅Itzik Ben-Gan关于TOP的SQLMag文章.

如果您只是想删除一组重复项中的任何一行,或者只是想因某种原因删除一个随机行,那么省略ORDER BY并做一些更简单的操作是安全的:

DELETE TOP (1) FROM table

MSDN上DELETE文档引用:

TOP(表达式)[PERCENT]指定要删除的随机行的数量或百分比.表达式可以是行的数量或百分比.与INSERT,UPDATE或DELETE一起使用的TOP表达式中引用的行不按任何顺序排列.

INSERT,UPDATE和DELETE语句中需要括号分隔TOP中的表达式.有关更多信息,请参阅TOP(Transact-SQL).