Linq或SQL连接不同服务器上的表

时间:2012-07-05 13:32:32

标签: sql linq linqpad

我刚刚开始为一家新公司工作,我经常需要查询8个不同的服务器(所有Microsoft SQL 2005服务器)。每天早上我每天早上都会连接到每个服务器,以便阅读[应用程序]。[tmpLogs]表中的最新条目。我必须为每个服务器使用不同的用户名和密码。我想写一个Linq或SQL查询,我可以在LinqPad中运行,以获得在每个服务器上的tmpLogs表中输入的最后一行。有谁知道如何连接到所有服务器并在一个查询中查询表?

2 个答案:

答案 0 :(得分:1)

您可以选择一个SQL Server作为“主”服务器。然后将其他服务器设置为LINKED Servers(请参阅http://msdn.microsoft.com/en-us/library/ms188279.aspx)。您可以配置LINQ to SQL对象以通过“主”服务器连接到LINKED服务器。

您也可以从LINQ中取出它并设置计划任务以定期将数据推送到“仓库”表中。通过存储过程与LINKED服务器通信比通过LINQ更容易。据我所知,LINQ不包含数据库目录的概念,只包含表。目录在DataContext对象中被抽象出来,如果您使用的是Linqpad,则该对象不存在。

答案 1 :(得分:1)

tmpLogs表在每台服务器上都有相同的列吗?如果是这样,您可以利用LINQPad允许您使用不同的连接字符串创建新类型的DataContexts这一事实。

只需连接到您的一个数据库,然后执行以下操作:

// 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();
}
相关问题