server1 に 1 つの table1 があり、server2 に別の table2 があるインライン クエリがあります。これら 2 つのテーブルを結合し、データを取得する必要があります。
あるサーバーに接続してデータを取得し、次のサーバーに接続してデータをフェッチするなど、これを行うことができます。それらに参加します。
しかし、他に良い方法はありますか。リンクサーバーについて聞いたことがあります。それはここで役立ちますか?
前もって感謝します !!!
server1 に 1 つの table1 があり、server2 に別の table2 があるインライン クエリがあります。これら 2 つのテーブルを結合し、データを取得する必要があります。
あるサーバーに接続してデータを取得し、次のサーバーに接続してデータをフェッチするなど、これを行うことができます。それらに参加します。
しかし、他に良い方法はありますか。リンクサーバーについて聞いたことがあります。それはここで役立ちますか?
前もって感謝します !!!
はい、一方のサーバーから他方のサーバーへのリンク サーバーをセットアップします。次に、結合を使用して通常のクエリを実行できます。次のようになります。
SELECT t1.Col1
, t2.ColA
FROM server1Table t1
INNER JOIN SERVER2.dbname.dbo.tableName t2 ON t1.TheId = t2.TheId
これは、Server1 でクエリを実行していることを前提としています。[servername].[dbname].[schema].[table] を使用して 2 つのリンク サーバーを参照し、SQL で通常どおり使用することもできます。
または、 OPENROWSETを使用することもできます(ただし、設定できる場合は、リンク サーバーが最も簡単です)。OpenRowSet は次のようになります。
SELECT t1.Col1
, t2.ColA
FROM server1Table t1
INNER JOIN OPENROWSET('SQLNCLI', 'Server=Server2;Trusted_Connection=yes;',
'SELECT t2.ColA, t2.TheId FROM dbname.dbo.tableName') AS t2
ON t1.TheId = t2.TheId
そして、あたかもローカルテーブルであるかのように「a」に参加できます。内部ではおそらくすべてのデータがローカル データベースに取り込まれているため、内部クエリに WHERE を追加して行を制限し、必要な列のみを取得することを検討する必要があります。