3

重複の可能性:
挿入された行の ID を取得する最良の方法は?

SQL Server 2012 を使用して初めてオークション データベースを構築するとします。

誰かがオークション リストを作成し、これがデータベースに挿入され、新しい一意の AuctionID が与えられます。オークションの挿入に加えて、画像、製品のプロパティなど、保存してオークションに関連付ける必要がある他の多くのデータがあります。

基本的なオークション データを保持するテーブルと、オークションとの多対多の関係を可能にする他のすべての情報を格納する他のテーブルがあります。

さて、オークションに関するデータを保持する他のテーブルには、AuctionID を含む少なくとも 1 つの列と、製品仕様などの他の情報を保持するもう 1 つの列があります。

これを達成するための私の方法 (これまでのところ) は、最初に基本的な Auction リストを挿入し、データベースに新しい AuctionID を与えることです。素晴らしい。次に私はこれを行います:

SELECT TOP 1 AuctionID FROM Auction
ORDER BY Timestamp DESC

これは、最後に挿入された AuctionID を返す必要があり、挿入直後に実行すると正しいものになるはずです。

次に、この AuctionID を取得し、追加情報を他のテーブルに挿入するときにその値を使用して、多対多の関係を作成します。ビオラ!

ただし、これは、同時に数百万のトランザクションが発生している場合にこれを行う正しい方法なので、理論的には、挿入は互いにミリ秒以内に発生する可能性があります。挿入が行われてから、最後に挿入された AuctionID を取得するまでの間に、間違った AuctionID になる可能性があります。

私の初心者の投稿を許して、これを行うための最良の方法を提案してくれるほど親切にしてもらえますか? 目の前に多くの SQL の本がありますが、これに関連するものは何も見つかりません。

4

1 に答える 1

2

この質問が解決されないと仮定すると、SQL Server 2012 では、SQL Server にシーケンス番号と呼ばれる新しい機能が導入されています。列を ID として定義するのと似ていますが、代わりにグローバルな番号ディスペンサーに過ぎず、それ自体にのみ関連付けられています。

シーケンス番号は、 IDENTITYのハードコードされた 10 の代わりに明示的なキャッシュを設定する機能と同様に、シーケンス番号を使用するために必要なメタデータ操作が少ないため、ID プロパティよりも優れたパフォーマンスを提供できます。

于 2012-12-26T22:54:13.227 に答える