0

2つの異なるデータベースの1つのテーブルから別のテーブルに値を挿入しようとしていました。

私の問題は、リレーションを持つ2つのテーブルがあり、最初のテーブルにもID列があることです。

例:テーブルfirst(id、Name)-テーブルsecond(id、address)

したがって、両方のテーブルがデータベース内の値とともに存在し、このデータベースから別のデータベースに値をコピーしようとしています。

したがって、最初のデータベースから2番目のデータベースに値を挿入すると、最初のテーブルがそれ自体でId列の値を挿入するため、そのIDを2番目のテーブルにリンクする必要があります。

どうやってやるの?

MSSQLServer2000を使用した更新

4

3 に答える 3

0

SQL Server 2000に挿入した直後に@scope_identityを使用すると、現在のスコープ内の最後のIDが得られますが、データの一括挿入でどのように機能するかはわかりません。

http://msdn.microsoft.com/en-us/library/ms190315.aspx

于 2011-09-29T17:18:35.673 に答える
0

これがSQLServer2005以降の場合は、挿入ステートメントでoutput句を使用して、挿入されたばかりのIDを取得することをお勧めしますが、SQLServer2000では使用できませんでした。

データにID列以外の一意の列または一連の列が含まれている場合は、その一連の列に基づいて最初のテーブルにクエリを実行してIDを取得し、それを使用して2番目のテーブルにデータを入力できます。

于 2011-09-29T17:33:42.543 に答える
0

ターゲットテーブルが空の場合は、SET IDENTITY_INSERT ONを使用できます。これにより、元の値をID列に挿入できるようになり、参照されるIDを更新する必要がなくなります。もちろん、挿入されたIDと重複する可能性のある既存のIDがある場合、それは解決策ではありません。

最初のテーブルの名前が一意である場合は、新しいIDと古いIDの間のマッピングをボイルして、次のような更新を実行できます。

UPDATE S
SET S.id = F.id
FROM second S
INNER JOIN first_original FO ON FO.id = S.id
INNER JOIN first F ON F.name = FO.name

名前が一意でない場合は、古いIDと新しいIDの間のマッピングを提供するために、元のIDを「最初」に保存する必要があります。「秒」のIDが更新された後に削除できる一時的な新しい列である可能性があります。

または、Rich Andrewsが言ったように、@ scope_identityを使用できますが、この場合、挿入を1つずつ実行する必要があります。ソーステーブルでカーソルを宣言し、各レコードを挿入し、新しいIDを取得して、「2番目の」テーブルに挿入します。

于 2011-10-01T23:51:15.180 に答える