2012-07-05 61 views
0

我剛開始爲一家新公司工作,在那裏我經常需要查詢8臺不同的服務器(所有Microsoft SQL 2005服務器)。在每天早上的這個時刻,我每天早上都會連接到每個服務器,以便在[應用程序]。[tmpLogs]表中讀取最新條目。我必須爲每臺服務器使用不同的用戶名和密碼。我想編寫一個Linq或SQL查詢,我可以在LinqPad中運行以獲取在每臺服務器上的tmpLogs表中輸入的最後一行。有誰知道我可以如何連接到所有服務器並在一個查詢中查詢表?不同服務器上的Linq或SQL連接表

+0

你真的想這樣做,都在同一個查詢?如果一臺服務器關閉,您將不會收到任何數據。 – RedFilter 2012-07-05 13:34:28

回答

1

tmpLogs表在每臺服務器上的列是否相同?如果是這樣,您可以利用LINQPad允許您使用不同連接字符串創建新類型的DataContext的事實。

只需連接到你的數據庫只有一個,而做到這一點:

// 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(); 
} 
1

您可以選擇一個SQL Server作爲您的「主」服務器。然後將其他服務器設置爲LINKED服務器(請參閱http://msdn.microsoft.com/en-us/library/ms188279.aspx)。你可以配置一個LINQ to SQL對象,通過'主'服務器連接到LINKED服務器。

您也可以將其從LINQ中取出並設置計劃任務以定期將數據推送到「倉庫」表中。通過存儲過程與LINKED服務器通信比通過LINQ更容易。據我所知,LINQ不包含數據庫目錄的概念,只包含表格。目錄在DataContext對象中抽象出來,如果您使用的是Linqpad,則該對象不存在。