0

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

4

2 回答 2

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();
}
于 2012-07-06T04:53:36.203 回答
1

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

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

于 2012-07-05T13:39:43.157 回答