如何仅删除SQL Server中表的顶行?
我做了:
set rowcount 1;
delete * from table;
set rowcount 0;
Run Code Online (Sandbox Code Playgroud)
但我不确定它是否是一个很好的方法.
有没有更好的方法来实现这一目标?
更新:哎呀!@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
TOP(表达式)[PERCENT]指定要删除的随机行的数量或百分比.表达式可以是行的数量或百分比.与INSERT,UPDATE或DELETE一起使用的TOP表达式中引用的行不按任何顺序排列.
INSERT,UPDATE和DELETE语句中需要括号分隔TOP中的表达式.有关更多信息,请参阅TOP(Transact-SQL).