2017-06-28 13 views
1

私はWebアプリケーションのSQLサーバーデータベースを持っています。私の要件は、1つのソースデータベースから2-3テーブルデータを読み込み、そのデータをデスティネーションデータベースに挿入することです。私の入力は、ソースデータベースからデータを読み取らなければならないということに基づいて、名前とIDになり、同様の名前がデスティネーションデータベースにすでに存在するかどうかを検証する必要があります。私はC#のWindowsアプリケーションまたはWebアプリケーションを介してこれを行う必要があります。あるデータベースから別のデータベースにSQL Serverデータをエクスポートする

私の研究では、SqlBulkCopyまたはSSISパッケージの使用を推奨しています。次のコードを使用して1つのテーブルデータを転送しようとしました。

 using (SqlConnection connSource = new SqlConnection(csSource)) 
     using (SqlCommand cmd = connSource.CreateCommand()) 
     using (SqlBulkCopy bcp = new SqlBulkCopy(csDest)) 
     { 
      bcp.DestinationTableName = "SomeTable"; 
      cmd.CommandText = "myproc"; 
      cmd.CommandType = CommandType.StoredProcedure; 
      connSource.Open(); 
      using (SqlDataReader reader = cmd.ExecuteReader()) 
      { 
       bcp.WriteToServer(reader); 
      } 
     } 

私が直面してる問題はそう、表1、ID(主キー)の変更のような表2の値に基づいて、私はSqlDataReaderの中でこれを更新する必要があり、私は2つのテーブルデータをコピーする必要があり、ということです宛先データベースでこの新しいIDを取得するには、最初に1つのテーブルデータを挿入してIDを取得し、次にこのIDをリーダーオブジェクトで更新してから別のSqlBulkCopyを実行する必要があります。これを行うには他に何かありますか?ソースSQLインスタンスで

+1

両方のデータベースが同じSQLインスタンス上にあるかどうかを指定できますか? –

+0

いいえ、同じインスタンスではありません – user1890098

答えて

0

Iは宛先/ターゲットSQLインスタンスを参照するリンクサーバーを作成し、その後、私はこのようにして、ソース・データベース内のストアドプロシージャを作成します。

USE SourceDatabase 
GO 
CREATE PROCEDURE dbo.ExportSomething 
@param1 DataType1, 
@param2 DataType2, ... 
AS 
BEGIN 

INSERT LinkedServer.DestinationDatabase.dbo.TargetTable 
SELECT ... 
FROM dbo.Table1 INNER JOIN dbo.Table2 .... 
WHERE Col1 = @param1 AND/OR ... 

END 
GO 

を次に、最後のステップは、これを呼び出すことですクライアントアプリケーションからのストアドプロシージャ

+0

私の要件は、ユーザーからの接続先のSQL Server接続の詳細を取得していることです。データベース名は何でもかまいませんので、sp_addlinkedserverを使用してプログラムでリンクサーバーを作成できますあなたの答えでは、私はユーザーの入力に基づいてLinkedServer.DestinationDatabaseの部分を動的に変更することが可能ですか? – user1890098

+0

このストアドプロシージャを1回だけ実行することができる場合にのみ、sp_add * /を使用してthis/*のようなリンクされた静的を作成できます。 2人のユーザーが同時にこのストアドプロシージャ*を実行する場合、このソリューションは最適ではありません。代わりに、dinamic sql(ODS関数)内でOPENDATASOURCE()関数([ref](https://docs.microsoft.com/en-us/sql/t-sql/functions/opendatasource-transact-sql)を使用できます)変数を受け入れることはありません(例:@connection_string - paramters)。 –

0

上記の解決策が役に立たない場合は、SQL Database Recoveryソフトウェアを使用して、データベース全体やテーブル、ビュー、SP、関数などの選択したデータベースコンポーネントを既存のデータベースに簡単にエクスポートすることもできます。

+0

恥知らずのような音がする –

関連する問題