質問: Microsoft SQL Server Express Edition バージョン10.50.6000.34です 異なるサーバーのテーブルからレコードを取得しもう一方のテーブルにinsertしたい。 具体的には、 サーバーAとサーバーBがあり、 メインがサーバーAとし、サーバーBは読みとりのみできます。 サーバーBのテーブルから一部のレコードを取得し、サーバーAのテーブルにinsertしたいです。 この場合サーバーAのストアドプロシージャで実行させるのがよいのでしょうか。 どのような方法が一般的なのでしょうか、ご教示ください。
回答: 質問文そのままだと「サーバーB → サーバーB」というように読めますが、「サーバーB → サーバーA」の間違いですか? 別の方の回答のとおり、普通のSQLでサーバーをまたいだデータのやりとりはできません。私が知る範囲では方法は2つ * リンクサーバーというサーバー同士をつなげる設定を行い、2つのSQL Server間でSQL文によるアクセスを可能にする。 * SSISという機能を用いて、サーバー間でデータを転送する設定を行い、タイマー設定などで自動的に処理が発動するようにする。 どちらもSQL Serverの機能をフルに使うので、Express Editionではできないかもしれません(調べてみてください)。また、仕事などで使う場合、開発者だけではなくサーバーの管理者や、セキュリティの管理者も含めて話をつけて設定する必要があります。 また、後者のSSISという機能は多分Express Editionでも使える「データエクスポート/インポート」という機能とほぼ同等です。これも、サーバー間でテーブル→テーブルでデータを移すことができますし、そのデータ移動設定を保存しておいて実行することも可能です。データの移動にはSQLも指定できるので、特定条件に一致する物だけを操作することも可能です。 このあたりの方法で目的を達成できないか検討されてはいかがでしょうか? また、本来の質問である「どっちで処理を動かすか」ですが、たとえばSSISの場合、どっちでも可能です。ただし、やはりセキュリティ面やネットワークの制約など、インフラ寄りの制限や理由により「こっちでは動かすな!」みたいな指示があったりすると思うので、一概には言えません。 データを送るのか、取りに行くのか、そういうところを決めるのが「設計」なので、妥当な理由があればどっちも正解と言えるのでは無いでしょうか。 (あまり専門ではないので詳しい方、補足お願いします......)