在 2 个不同的服务器上加入 2 个表
Posted
技术标签:
【中文标题】在 2 个不同的服务器上加入 2 个表【英文标题】:Join 2 tables on 2 different servers 【发布时间】:2021-01-17 01:06:04 【问题描述】:两台服务器已链接,但尝试运行时出现错误:
消息 208,第 16 级,状态 1,第 1 行 无效的对象名称“COI_port.Mess.agent_data”
SQL 代码:
SELECT
DATEPART(Hour, Chat) AS Interval, Chat,
msg.RepRegion, msg.AgentRole,
msg.Person, msg.Chat, msg.ChatStart, ChatEnd,
--columns needed
[AgentMessages], [ConsumerMessages],
[ResolutionHrs], [FirstRespSecs], [Abandoned],
--get interval online time
away.ntlogin, away.report_dt, away.int_interval,
away.backsoonsecs, away.awaysecs, away.onlinesecs
FROM
[REGIONAL_OI].[east].[MsgDetails] (nolock) msg
--join tables
FULL OUTER JOIN
[COI_port].[Mess].[agent_data](nolock) away ON msg.Interval = away.int
AND msg.Person = away.login
WHERE
msg.Chat >= GETDATE() - 14
【问题讨论】:
这不是 mysql 是的,这是 ms sql server。[COI_port].[Mess].agent_data
是一个三部分名称 - 因此第一部分被解释为数据库名称。 getdate()-14
是一个坏习惯——停止进一步发展它。使用日期添加。并努力格式化您的查询,使其可读 - 鼓励其他人帮助您,帮助他们轻松阅读和理解您的查询。
说到坏习惯......见Bad Habits to kick - putting NOLOCK everywhere - 不建议在任何地方都使用它 - 恰恰相反!
在我的工作地点,他们让我们使用 (nolock) @marc_s
【参考方案1】:
在您的查询中,您使用 [COI_port].[Mess].[agent_data] 从另一台服务器调用表。但是你需要在数据库名和表名之间使用 dbo 如下:
[COI_port].[Mess].dbo.agent_data
所以查询将是:
SELECT
DATEPART(Hour, Chat) AS Interval, Chat,
msg.RepRegion, msg.AgentRole,
msg.Person, msg.Chat, msg.ChatStart, ChatEnd,
--columns needed
[AgentMessages], [ConsumerMessages],
[ResolutionHrs], [FirstRespSecs], [Abandoned],
--get interval online time
away.ntlogin, away.report_dt, away.int_interval,
away.backsoonsecs, away.awaysecs, away.onlinesecs
FROM
[REGIONAL_OI].[east].[MsgDetails] (nolock) msg
--join tables
FULL OUTER JOIN
[COI_port].[Mess].dbo.agent_data(nolock) away ON msg.Interval = away.int
AND msg.Person = away.login
WHERE
msg.Chat >= GETDATE() - 14
【讨论】:
如果您可以更具体一些。它不是已经是查询的一部分了吗?以上是关于在 2 个不同的服务器上加入 2 个表的主要内容,如果未能解决你的问题,请参考以下文章