在 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 个表的主要内容,如果未能解决你的问题,请参考以下文章

加入 3 个表,从 2 个不同的表和按材料名称分组的总数量

Mysql查询加入5个表

如何在日期列上查询 2 个表,如果不存在匹配的日期,那么我们必须加入下一个最大日期

在 2 种不同类型的数据库之间共享 1 个表

如何将2个表同名行加入一列

在具有数百万条记录的 2 个表上加入更快