【发布时间】:2011-06-17 18:35:55
【问题描述】:
我发现了一堆关于这个主题的问题,它们都有很好的解决方案,但没有一个真正涉及如果数据不是以一种特定的方式排序时该怎么做。例如,以下查询:
WITH MyCte AS
(
select employee_id,
RowNum = row_number() OVER ( order by employee_id )
from V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
如果数据按employee_id 排序,效果很好。但是,如果我的数据没有任何特定顺序但行号本身充当 ID 怎么办?我的目标是编写这样的查询(Row_Number() 函数没有 ORDER BY 子句):
WITH MyCte AS
(
select employee_id,
RowNum = row_number() OVER ( <PRESERVE ORIGINAL ORDER FROM DB> )
from V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
编辑:通过谷歌搜索,我发现这是不可能的。有人可以为此提出解决方法吗?
【问题讨论】:
-
除非您有明确的
ORDER BY子句,否则在 SQL Server 环境中NO 隐式排序(没有“来自 DB 的原始订单”) -
@marc_s:谢谢。澄清一下,您的意思是说,在一个包含 20000 条记录的小型数据库中,它不保留插入顺序(即使没有并发插入)?
-
@marc_s:+1 你是对的。即使在顺序插入期间,它也不会保留顺序。这与我的 MySQL 经验完全不同。感谢您的提醒!
标签: sql sql-server database