0

2 つのデータベースを使用する SQL クエリを実行しようとしています。このクエリは 2 つの異なるデータベースであるため、このクエリに 2 つの接続文字列を使用するにはどうすればよいですか?

var commandText = @"insert into database1 select * from database2";

        using (SqlConnection myConn = new SqlConnection(ConnectionString))
        {
            using (SqlCommand myCommand = new SqlCommand(commandText, myConn))
            {
                myConn.Open();
                myCommand.ExecuteNonQuery();
            } 
4

4 に答える 4

2

両方のデータベースが同じサーバー インスタンスにある場合、2 つの接続は必要ありません。に仮想的に接続していserver instanceます。それで問題ありません。

var commandText = @"insert into [dbname1].dbo.table1 select * from 
                   [dbname2].dbo.table1";

最善の方法は、ストアド プロシージャを作成し、(構成から) dbnames をパラメーターとして sp に渡すことだと思います。次に、動的クエリを作成して挿入を実行します。そうすれば、さまざまなデータベース名をより適切に制御できます。

それらが 2 つの異なるインスタンスまたは別々のサーバーにある場合は、sp_addlinkedserverを使用してそれらをリンクし、sp_addlinkedsrvloginを使用してログインします。また、アクションを実行した後は必ずドロップしてください。

一般的なアドバイスとして、これはエラーが発生しやすいため推奨されません。コメントのもう少し詳細...

于 2013-02-20T14:27:34.993 に答える
1

できません。ただし、データベースを制御できる場合は、単一の接続文字列を使用してクロスサーバー選択用にデータベースを設定できます。

于 2013-02-20T14:24:55.820 に答える
0

両方のデータベースにアクセスできるログインを作成し、1 つの接続文字列のみを使用します。クエリは次のようになります。

string sql = "INSERT INTO [Database1].[dbo].[Table] SELECT * FROM  [Database2].[dbo].[Table]
于 2013-02-20T14:25:07.807 に答える
0

できないと思います。最初のデータベースで select ステートメントを実行してから、2 番目のデータベースに挿入する必要があります。

于 2013-02-20T14:25:10.050 に答える