2012-05-08 5 views
4

私は主キーの自動インクリメント整数よりもGUIDを使い始めました。SQLサーバーでは、プライマリキーがGUIDの場合、挿入順でテーブル行を並べ替えるにはどうすればよいですか?

しかし、開発中に私はアプリケーションを挿入したばかりのレコードを確認するために(SQL管理スタジオまたはビジュアルスタジオから)データベースを照会することに慣れています。私はプライマリでは注文できないという事実に腹を立てています最新のレコードを見るためにキーを押してください。

tihを達成する方法はありますか?

+8

長い挿入プロセスは5はactaully 6の後に挿入されたことを意味するかもしれないとして、あなたは実際にあなたが挿入順序を知りたい場合は、その後でdateInserted列を追加し、でもidentiesでtehの挿入順序を知ることができなかったんgetdate()のデフォルト値です。 GUIDも多くの理由からプライマリキーとしての問題ですので、これを研究してください。 NEWSEQUENTIALID()を使用してGUIDを生成することを検討することをお勧めします。 – HLGEM

+1

@HLGEM - 'SysUTCDateTime()'値を使用すると、DSTの変更前後で混乱が生じることがあります。 – HABO

+0

だから私は短い答えがNOだと仮定します:( 私が言ったように、それは開発の間に重要なので、最大のIDが最新のものであると仮定するのは大丈夫です。 – tishma

答えて

5

挿入順序に基づいてGUID列を注文することはできません。別の列に依存する必要があります。

CreationMomentという名前の列をDateTimeとして追加し、デフォルト値はGETDATE()としてください。理論的にはに衝突(つまり、作成日時が同じ)がある可能性があるため、そのデータ型が適切かどうかを判断する必要があります。私の経験では決して問題ではありません。

3

あなたは自動増分で新しいフィールドbigintを追加して頼りにする必要はありません。キーを作る必要はありません。 bigintでの衝突やサイズの問題はありません

2

@Yuckと@Samehの両方には良い回答がありますが、TIMESTAMP列がニーズに適していると思います。一意であることが保証されており、ORDER BYを使用してソートすることができます。

MSDN - timestamp (Transact-SQL)

+1

注意:新しいタイムスタンプ値が各挿入と更新の行に割り当てられます。 – Mike

関連する問題