我们可以为所有使用 SQL 的数据库以 generic/common 的方式实现类似于 ROW_NUMBER() 的功能吗?

Can we implement the functionality similar to ROW_NUMBER() in generic/common way for all databases using SQL ?

在我的项目中,我允许用户 select 从给定的选项中选择他的数据库,我需要考虑所有这些可选数据库来编写查询。因此,根据我的一个要求,有没有办法在 MSSQL 中实现类似于 ROW_NUMBER() 的通用功能?

这就是您使用解析的方式

SQL 服务器

select top 10 row_number() over (order by name)
from sys.objects

甲骨文

select row_number() over (order by object_name)
from all_objects
where rownum<=10

请注意,我刚刚使用字典表生成了一些测试数据 - 您可以使用自己的数据。

如果你想要一个唯一的(非顺序键)你可以使用 guid

SQL 服务器

select top 10 NEWID()
from sys.objects

甲骨文

select sys_guid()
from all_objects
where rownum<=10

Sqlserver 甚至有 NEWSEQUENTIALID () 来创建一个顺序 guid,它解决了他们为大量值索引 guid 的问题。