単一のスクリプトを使用してデータベースに一連のエントリを作成しようとしていますが、発生している問題は、作成した前のエントリの生成された主キーを参照する方法です。
たとえば、顧客を作成し、その顧客の注文を作成しようとした場合、顧客用に生成された主キーを取得するにはどうすればよいですか?
私はSQLServerを使用しています。
単一のスクリプトを使用してデータベースに一連のエントリを作成しようとしていますが、発生している問題は、作成した前のエントリの生成された主キーを参照する方法です。
たとえば、顧客を作成し、その顧客の注文を作成しようとした場合、顧客用に生成された主キーを取得するにはどうすればよいですか?
私はSQLServerを使用しています。
そのようです:
DECLARE @customerid int;
INSERT INTO customers(name) VALUES('Spencer');
SET @customerid = @@IDENTITY;
編集:
トリガーで期待どおりに機能するには、明らかに SCOPE_IDENTITY() である必要があります。
DECLARE @customerid int;
INSERT INTO customers(name) VALUES('Spencer');
SET @customerid = SCOPE_IDENTITY();
お使いのバージョンで利用可能な場合は、代わりに SCOPE_IDENTITY() を使用してください。@@IDENTITY よりも安全です。
一度に複数の行を挿入する場合は、OUTPUT INTO
SQL Server 2005 以降の機能を使用して、すべての ID を取得できます (関連レコードの作成などに使用できます) 。
これにより、ループやカーソルなどを記述する必要がなくなります。