2012-02-28 9 views
0

こんにちは私はこれを達成するためのスマートなアイデアを得ようとしています。私はリンクされたサーバー名の完全なリストを含む 'Servers'という列のテーブルT1を持っています。そして、私はこれらのリンクされた各サーバーのいくつかのテーブルを照会し、その結果を使用して、このテーブルのDB_Nmaesという名前の他のカラムを設定します。私は、全体のテーブルT1をループしていると考えると、クエリに各ループ内の動的SQLを構築することができ、このT-SQLは、リンクされたサーバーのクエリ結果を使用してローカルテーブルにデータを入力します

T1

 
Servers DB_Names Datafile_Size, …. 
S1 D1 2M S1 D2 3M S1 D3 5M S2 D1 3M S2 D2 6M . . .

一つの方法のようになる後

理想的には、テーブルを結果対応するリンクされたサーバーを作成し、他のフィールドDB_NamesとDatafile_sizeに挿入します。 しかし、私はその列に多くのリンクされたサーバーの行があるため、これを行うことを避けようとしています。セットベースの操作を使用してこれを達成できる方法はありますか?

ありがとうございました。

+0

'[Servers]'で始まるように '[DB_Names] 'も入力されていますか? – squillman

+0

はい、DB_NAMESとDatafile_sizeはすべてNULLです。すべてのリンクされたサーバー名をデータとして含む[サーバー]列のみがあります。私はS1.sys.master.databasesのようなクエリを各行で実行したいので、探している結果はT1に表示されているようになります。ありがとう – user1238837

+0

もう1つのことは、リストに表示されているデータベースにのみ興味があり、必ずしもそのサーバー上のすべてのデータベースに興味がありますか? – squillman

答えて

0

リモートサーバー上のすべてのデータベースが必要なので、私は2テーブルアプローチに変更することを検討します。最初のテーブルは、照会するすべてのリンクされたサーバーを含むテーブルになります。リンクされたサーバー間で呼び出しを行うには、動的SQLステートメントを作成するカーソルをループする必要があります。

+0

すぐにいくつかのサンプルコードを投稿してうれしく思います。 – squillman

0

結果を別のテーブルに保存することもお勧めします。

CREATE TABLE ServerDbs (LinkedServer VARCHAR(100), DbName VARCHAR(100)) 

DECLARE @q VARCHAR(MAX) 
SET @q = 
    (SELECT 'INSERT INTO ServerDbs SELECT ''' + T.Server + ''', name FROM ' + T.Server + '.master.sys.databases' 
    FROM T 
    FOR XML PATH('')) 

EXEC (@q) 
関連する問題