我在一个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)
我认为重复问题不是加入两个数据库,而是首先加入你的加入.我想你可能需要一个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上).尝试四表连接,直到你做对了.然后添加多数据库调用的复杂性.