0

私は2つのテーブルUserInfoUserContact. UserInfoID 列 ( ) を使用してテーブルにデータを正常に挿入しましたID。ストアド プロシージャを使用してデータをテーブルに挿入しています。

UserInfo (Id, FirstName, LastName, Address)   
Usercontact(Id, UserInfoId, ContactNumber)

2番目のテーブルを挿入したい.最初のテーブルからIDを取得する方法と、そのIDを2番目のテーブルのストアドプロシージャで使用する方法.

4

2 に答える 2

1

SQL SERVER の場合: SCOPE_IDENTITYを使用します(Transact-SQL): 同じスコープ内の ID 列に最後に挿入された ID 値を返します。スコープは、モジュール (ストアド プロシージャ、トリガー、関数、またはバッチ) です。したがって、2 つのステートメントが同じストアド プロシージャ、関数、またはバッチ内にある場合、これらのステートメントは同じスコープ内にあります。

例えば。:

Insert Into UserInfo (FirstName,LastName,Address) 
Values (@FirstName,@LastName,@Address);

Declare @id int
SELECT @id = SCOPE_IDENTITY();

Insert Into Usercontact (Id,UserInfoId,ContactNumber) 
Values (@id,@UserInfoId,@ContactNumber);
于 2013-01-18T12:48:50.840 に答える
0

Scope_identity() または IDENT_CURRENT('tablename') を使用できます

SELECT SCOPE_IDENTITY()
値を生成したテーブルに関係なく、接続上および同じスコープ内のステートメントによって生成された最後の IDENTITY 値を返します。SCOPE_IDENTITY() は、@@IDENTITY と同様に、現在のセッションで作成された最後の ID 値を返しますが、現在のスコープにも制限されます。つまり、トリガーまたはユーザー定義関数によって作成された ID ではなく、明示的に作成された最後の ID 値が返されます。

SELECT IDENT_CURRENT('tablename')
値を作成した接続や、値を作成したステートメントのスコープに関係なく、テーブルで最後に作成された IDENTITY 値を返します。IDENT_CURRENT はスコープとセッションによって制限されません。指定されたテーブルに限定されます。IDENT_CURRENT は、任意のセッションおよび任意のスコープで特定のテーブルに対して生成された ID 値を返します。

*注: 後でトリガーを追加することに関連する潜在的な問題を回避するには、常に SCOPE_IDENTITY() を使用して、T SQL ステートメントまたはストアド プロシージャに最近追加された行の ID を返します。

詳細については、このブログ投稿を参照してください

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

于 2013-01-18T12:57:48.500 に答える