2012-05-09 19 views
0

同じインスタンスの下に2つのデータベースDB1、DB2があるとします。私はDB1のSPにコードを次している別のデータベースでID IDを取得する方法は?

tab1(id1, ...): --id1 is identity column in DB1 
tab2(id2,...) : --id2 is identity column in DB2 

:よう は、私は、各データベースで2つのテーブルを持っている

use DB1 
declare @id2 int; 
insert into tab1(...) values (...); 
insert into DB2.dbo.tab2(...) values (...); 
set @id2 = SCOPE_IDENTITY(); 

が、私はID2の正しい値を得ることができない、それがnullです。 この問題を解決する方法は?

+1

このようなものがありますか?http://stackoverflow.com/questions/4537560/get-identity-from-another-serverlinked-server – Praveen

+0

GUIDを使用して、IDをどのようにするかをDBに伝えます。 –

+0

あなたは '@ id2'を' DB2.dbo.tab2'の最後に挿入されたアイデンティティに設定します。実際には何が問題なのですか? – wqw

答えて

2

「出力」句を挿入の一部として試してみることもできます。

declare @output table (id int) 

insert into DB2.dbo.tab2 (...) 
output inserted.id2 
into @output 
values (...) 

select @id2 = id from @output 

これは出力用の構文ですが、テストしていません。

+0

変数への代入に注意してください。挿入元が 'SELECT'か' VALUES()、()、() 'の場合、その変数に割り当てられている行のうちの1つだけを取得しています。 –

+0

Msg 405、レベル16、状態1、プロシージャSP_XYZのようなエラーが発生しました。リモートテーブルは、 'OUTPUT'句またはネストされたDMLステートメントを含むステートメントでDMLターゲットとして使用できません。 – Jaider

関連する問題