多个数据库上的SQL查询

Jus*_*tin 11 sql sql-server

我在一个sql server上有两个数据库,我必须将两个表从一个DB服务器链接到另一个DB服务器中的两个表,以获取我需要的信息.问题是,当我尝试从第二个DB服务器链接两个表时,查询返回1000或更多的重复项.如何在两个数据库上运行单个查询?所有表都具有共同的repair_ord列.有人可以帮帮我吗?谢谢.

server 1 = CXADMIN SERVER 2 = SAADMIN

这是我的查询到目前为止的样子:

SELECT RF.REPAIR_ORD, 
       RH.RECV_UNIT, 
       RH.RECV_SERIAL_NBR, 
       RP.FAULT_CODE, 
       RP.REPAIR_ACTION_CODE, 
       CG.TASK_CODE 
  FROM CXADMIN.RO_FAILURE_DTL RF,  
       CXADMIN.RO_HIST RH, 
       saadmin.sa_repair_part@elgsad rp, 
       saadmin.sa_code_group_task_dtl@elgsad cg 
 WHERE RF.REPAIR_ORD = RH.REPAIR_ORD 
   AND RP.REPAIR_ORD = CG.REPAIR_ORD 
   AND RF.FAILURE_CODE ='DISK'
   AND RH.CURR_FACILITY_ID ='23' 
   AND RF.CREATED_DATE >'1-JUN-2010' 
   AND RF.CREATED_DATE <  '1-JUL-2010' 
   AND (   CG.TASK_CODE ='PHMD' 
        OR CG.TASK_CODE ='PHSN' 
        OR CG.TASK_CODE ='CHMD' 
        OR CG.TASK_CODE ='CHSN')
Run Code Online (Sandbox Code Playgroud)

IAm*_*rey 8

我认为重复问题不是加入两个数据库,而是首先加入你的加入.我想你可能需要一个INNER或OUTER连接来处理链接.至于从两个不同的数据库获取数据,语法非常简单.您只需添加服务器名称点数据库名称点所有者名称点表名称.

例如:

SELECT firstdb.*, seconddb.*
FROM Server1.Database1.dbo.myTable AS firstdb
INNER JOIN Server2.Database2.dbo.myTable AS seconddb
   ON firstdb.id = seconddb.id
Run Code Online (Sandbox Code Playgroud)

在您的示例中,听起来您正在获取工作链接,但是您在repair_ord字段上遇到了连接问题.虽然我不知道你的架构,但我猜这个链接应该是一个INNER JOIN.如果你只是在FROM语句中添加两个表而你没有正确地执行WHERE语句,那么就会像你描述的那样遇到麻烦.

我建议您简化此设置并将其置于测试环境中(在一个DB上).尝试四表连接,直到你做对了.然后添加多数据库调用的复杂性.