1

database1 に tableA があり、database2 に tableA があり、どちらも同様の数の列と名前を基本的に同じテーブルに持っています。しかし、両者には異なるデータが含まれています。database1/tableA から行を取得し、database2/tableA に挿入しようとしています。

これは私がそれを行うことを考えている方法です:

SqlConnection conn = new SqlConnection("database1")
SqlCommand cmd = new SqlCommand("Select * from tableA where id = 1");
connection.Open()
SqlDataReader reader = cmd.ExecuteReader();

if(reader !=null )
var data = reader;

connection.Close();

次に、上記と同じ手順を実行して新しい接続を開き、データベース 2 の tableA にデータ変数値を挿入しようとします。

これは正しいアプローチですか?これを行うより良い方法はありますか?

4

3 に答える 3

3

DB間クエリでこれを行います。MSS 2005/2008 では、2 つのサーバーが相互に認識できる限り、2 つのサーバーを "リンク" できます。これが完了すると、リンク サーバー名、データベース、スキーマ所有者、およびテーブルをドット表記で指定することにより、リンク データベースのテーブルを参照できます。これにより、INSERT SELECT が可能になります。

INSERT INTO TableA --in database1
{
   /*columns*/
}
SELECT /*columns*/ from remoteServer.database2.dbo.TableB
WHERE /*dupe-checking, other conditions*/

2 つのデータベースが同じサーバー上にある場合は、リンクする必要さえありません。リモートデータベースのテーブルの前に DB 名とスキーマ所有者を付けるだけです (または、デフォルトの「dbo」の場合は、db 名とテーブル名の間に 2 つのドットを使用します。

于 2012-09-05T16:06:45.407 に答える
1

代わりにこのクエリを使用できます

INSERT INTO DATABASE2.dbo.TABLEA T1
SELECT * FROM DATABASE1.dbo.TABLEA T2
WHERE T2.ID = 1

次のc#コードは、両方のデータベースが同じサーバーにある場合に機能するはずです。

SqlConnection conn = new SqlConnection("Enter Connection String of DB, in which you insert the records.(in ur example it is,DATABASE2)");
            string cmdText=@"INSERT INTO DATABASE2.dbo.TABLEA T2
                             SELECT * FROM DATABASE1.dbo.TABLEA T1
                             WHERE T1.ID = 1";
            SqlCommand cmd = new SqlCommand(cmdText, conn);
            cmd.ExecuteNonQuery();
于 2012-09-05T16:03:12.223 に答える