为什么MS SQL Server SEQUENCEs没有像Oracle这样的ORDER参数?


9

T-SQL 的文档中CREATE SEQUENCE,您可以看到该CREATE SEQUENCE命令没有ORDER参数。

为了进行比较,用于CREATE SEQUENCE显示ORDER/ NOORDER选项的Oracle文档

ORDER

指定ORDER以确保按请求顺序生成序列号。如果将序列号用作时间戳,则此子句很有用。对于用于生成主键的序列,保证顺序通常并不重要。

ORDER仅在将Oracle数据库与Real Application Clusters一起使用时才有必要保证有序生成。如果使用独占模式,则序列号始终按顺序生成。

NOORDER

指定NOORDER是否不想保证按请求顺序生成序列号。这是默认值。

Microsoft SQL Server是否为SEQUENCEs 提供强大的排序约束?还是Microsoft总体上认为它不重要?


2
对于Oracle,这通常仅对于RAC才有意义-据我所知,没有什么等效于SQL Server中的RAC。为什么您认为需要它?
a_horse_with_no_name

我只是使程序与SQL Server兼容。它创建了一些序列,在CREATE SEQUENCE语句中,我遇到了ORDER参数,我只是想确保这不会成为问题(我不确定到底为什么要ORDER添加,所以我以为我可能会问,以防万一。
丹尼尔·格雷

Answers:


12

在SQL Server中,所有序列号都是在单个实例上生成的,因此它们已经固有地排序了。而且,如果您只是将它们用作唯一数字,则无论如何都没有关系。

Oracle实施方式有所不同,因为在RAC环境中(并非所有Oracle实施方式),两个不同的“实例”可能会生成两个序列号(这对Oracle来说是错误的术语,只是在SQL Server中具有等效性)。通常,您不会在乎先请求的请求是否速度较慢,而后一个请求的请求数目是否更高-除非像Oracle文档所述,否则您将序列用作时间戳以真实反映原始请求的顺序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.