レコードを挿入してラウンドトリップで読み戻したり、ネイティブのwin dll呼び出しを呼び出したりせずに、SQL Server 2005+ Sequential Guidジェネレーターの機能を取得する方法はありますか?誰かがrpcrt4.dllを使用する方法で答えるのを見ましたが、それが私のホストされた環境から本番環境で機能するかどうかはわかりません。
編集: @John Bokerの回答を使用して、最初からやり直す以外に、最後に生成されたGuidに依存するのではなく、GuidCombジェネレーターに変換しようとしました。Guid.Emptyで始めるのではなく、シード用です。
public SequentialGuid()
{
var tempGuid = Guid.NewGuid();
var bytes = tempGuid.ToByteArray();
var time = DateTime.Now;
bytes[3] = (byte) time.Year;
bytes[2] = (byte) time.Month;
bytes[1] = (byte) time.Day;
bytes[0] = (byte) time.Hour;
bytes[5] = (byte) time.Minute;
bytes[4] = (byte) time.Second;
CurrentGuid = new Guid(bytes);
}
私はそれを上のコメントに基づいています
// 3 - the least significant byte in Guid ByteArray
[for SQL Server ORDER BY clause]
// 10 - the most significant byte in Guid ByteArray
[for SQL Server ORDERY BY clause]
SqlOrderMap = new[] {3, 2, 1, 0, 5, 4, 7, 6, 9, 8, 15, 14, 13, 12, 11, 10};
これは、GUIDにDateTimeをシードしたい方法のように見えますか、それとも逆に実行してSqlOrderMapインデックスの最後から逆方向に作業する必要があるように見えますか?最初のGUIDが作成されるときはいつでも、アプリケーションのリサイクル中にのみ発生するため、ページングの中断になることについてはあまり心配していません。