【发布时间】:2022-11-30 18:49:10
【问题描述】:
为什么允许没有 ORDER BY 的 DELETE TOP? 为什么不允许使用 ORDER BY DELETE TOP?
在 SQL 中不应有行的“自然”顺序,这难道不违背吗?
解决方法是
DELETE FROM table WHERE id IN (
SELECT TOP n id FROM table WHERE ... ORDER BY ...)
类似的问题,对于 UPDATE TOP (n) ,不允许使用 ORDER BY。为什么?
【问题讨论】:
-
您可以将
SELECT TOP添加到列表中。这并不意味着有任何秩序。服务器可以以最便宜的方式免费返回数据,TOP适用于这些结果。在其他数据库中,您也可以使用不带ORDER BY的LIMIT或FETCH FIRST。 -
TOP允许没有ORDER BY(在大多数地方);它与您使用DELETE的事实无关。至于你关于“自然秩序”的观点,没有自然秩序。如果没有ORDER BY,SQL Server 将简单地以任意顺序处理行。 -
DML 语句中
TOP的主要用法(如UPDATE/DELETE)是在批处理时,在这种情况下,排序数据实际上不太可能很重要,因为它是WHERE将数据过滤到您想要影响的行。如果您在每次迭代中任意UPDATE100 万行,则不会改变最终目标,即所有适用的行都将是UPDATEd;这些行的顺序是什么UPDATEd 是无关紧要的。
标签: tsql