0

私は、8つの異なるサーバー(すべてのMicrosoft SQL 2005サーバー)に定期的にクエリを実行する必要がある新しい会社で働き始めたところです。現在、毎朝、各サーバーに個別に接続して、[application]。[tmpLogs]テーブルの最新のエントリを読み取っています。サーバーごとに異なるユーザー名とパスワードを使用する必要があります。LinqPadで実行して各サーバーのtmpLogsテーブルに入力された最後の行を取得できるLinqまたはSQLクエリを作成したいと思います。すべてのサーバーに接続して1つのクエリでテーブルをクエリする方法を知っている人はいますか?

4

2 に答える 2

1

tmpLogsテーブルには各サーバーで同じ列がありますか?その場合、LINQPadを使用すると、さまざまな接続文字列を使用して新しい型付きDataContextを作成できるという事実を利用できます。

データベースの1つだけに接続し、これを実行します。

// Dump the log for the current database:
TmpLogs.OrderByDescending (l => l.Date).First().Dump();

// Dump the logs for other databases:
string[] otherConnectionStrings = 
{
   "server=...database=....etc",
   "server=...database=....etc",
   ...
}

foreach (string cxString in otherConnectionStrings)
{
   var dc = new TypedDataContext (cxString);
   dc.TmpLogs.OrderByDescending (l => l.Date).First().Dump();
}
于 2012-07-06T04:53:36.203 に答える
1

「マスター」サーバーとして1つのSQLServerを選択できます。次に、他のサーバーをリンクサーバーとして設定します(http://msdn.microsoft.com/en-us/library/ms188279.aspxを参照)。'master'サーバーを介してLINKEDサーバーに接続するようにLINQtoSQLオブジェクトを構成できます。

また、これをLINQから取り出して、データを「ウェアハウス」テーブルに定期的にプッシュするようにスケジュールされたタスクを設定することもできます。LINQを介するよりも、ストアドプロシージャを介してLINKEDサーバーと通信する方が簡単です。私の知る限り、LINQにはDBカタログの概念は含まれておらず、テーブルのみが含まれています。カタログはDataContextオブジェクトで抽象化されますが、Linqpadを使用している場合は存在しません。

于 2012-07-05T13:39:43.157 に答える