web-dev-qa-db-ja.com

MS SQL ServerのシーケンスにOracleのようなORDERパラメータがないのはなぜですか?

T-SQLのCREATE SEQUENCEのドキュメント では、CREATE SEQUENCEコマンドにORDERパラメータがないことがわかります。

比較のために、 CREATE SEQUENCEのOracleドキュメント は、ORDER/NOORDERオプションを示しています。

ORDER

ORDERを指定して、要求の順序でシーケンス番号が生成されるようにします。この句は、シーケンス番号をタイムスタンプとして使用する場合に役立ちます。通常、主キーの生成に使用されるシーケンスでは、保証順序は重要ではありません。

ORDERは、Real Application ClustersでOracleデータベースを使用している場合に、順序付けられた生成を保証するためにのみ必要です。排他モードを使用している場合、シーケンス番号は常に順番に生成されます。

NOORDER

リクエスト順にシーケンス番号が生成されることを保証したくない場合は、NOORDERを指定します。これがデフォルトです。

Microsoft SQL ServerはSEQUENCEsに強い順序付け制約を提供しますか?それともマイクロソフトはそれを一般的に重要とは考えていませんか?

9
Daniel Gray

SQL Serverでは、すべてのシーケンス番号が単一のインスタンスで生成されるため、すでに固有の順序になっています。また、それらを一意の数値として使用するだけの場合は、特に問題にはなりません。

Oracleの実装が異なるのは、RAC環境(すべてのOracleの実装ではない)では、2つのシーケンス番号が2つの異なる「インスタンス」によって生成される可能性があるためです(これは、Oracleでは間違った用語ですが、SQL Serverで同等のものを描画しているだけです)。通常、最初にリクエストされたリクエストが遅く、後でリクエストされたものよりも大きい数になったかどうかは気にしません。ただし、Oracleのドキュメントが言うように、シーケンスをタイムスタンプとして使用して元のリクエストの順序を正確に反映している場合を除きます。

12
Aaron Bertrand