比较两个数据库中的多个列数据

时间:2017-03-07 04:59:00

标签: sql-server tsql

我有两个相同的数据库,整个数据堆从1传递到另一个,无论出于何种原因,似乎没有标志指示哪个是迁移的记录。

我想要做的是比较每个数据库中的多个字段,以查看迁移了哪些记录。

因此,例如,DB1可能在作业表中有10,000个作业,而DB2(旧的)有2,000个作业。我知道这些2,000个工作计入了DB1的10,000个工作中,但是在没有比较多个列之前我无法区分这两个工作,直到得到正确的数字。

我尝试了以下但是它失败了,给了我结果0:

SELECT COUNT(*) FROm Job j
FULL OUTER JOIN [DB2.dbo.job jc ON CAST(j.jobID AS NVARCHAR(20)) = jc.jobTitle
WHERE j.AMID = jc.amid
    AND j.ClientID = jc.clientID
    AND j.personID = jc.ClientID
    AND j.JobReceivedDate = jc.JobReceivedDate
    AND j.JobTitle = jc.JobTitle

对此的任何帮助都将非常感激。

-----编辑----------------------------------------- ------------------

以下代码导致返回超过300万行:

SELECT 
  d1.JobTitle, d1.AMID, d1.CLIENTID, d1.PersonID,
  d2.JobTitle, d2.AMID, d2.CLIENTID, d2.PersonID,
  [RESULT] = CASE 
    WHEN (d1.AMID = d2.AMID OR (d1.AMID IS NULL AND d2.AMID IS NULL))
     AND (d1.CLIENTID = d2.CLIENTID OR (d1.CLIENTID IS NULL AND d2.CLIENTID IS NULL))
     AND (d1.PersonID = d2.PersonID OR (d1.PersonID IS NULL AND d2.PersonID IS NULL))
    THEN 1 ELSE 0 END
FROM  [db1].dbo.Job AS d1
FULL OUTER JOIN
 [db2].dbo.Job AS d2
    ON D1.JobTitle = D2.JobTitle

此表中只有84,000条记录。

-----编辑----------------------------------------- --------------------

将我的初始查询更改为以下内容效果很好:

SELECT DISTINCT j.jobID, jc.jobID, jc.JobTitle, j.JobTitle FROM Job j
FULL OUTER JOIN [Gulf-Jobs].dbo.job jc ON j.JobTitle = jc.JobTitle
WHERE j.JobTitle = jc.JobTitle
    AND j.ClientID          = jc.clientID
    AND j.personID          = jc.personID
    AND j.JobReceivedDate   = jc.JobReceivedDate
    AND j.JobTitle          = jc.JobTitle
    AND j.JobUpdatedDate    = jc.JobUpdatedDate
    AND j.JobTypeID         = jc.JobTypeID
    AND j.JobStatusID       = jc.JobStatusID
ORDER BY Jc.JobID

1 个答案:

答案 0 :(得分:1)

从评论中回答

在您加入的第一个代码块(j.jobID AS NVARCHAR(20))= jc.jobTitle这就是为什么你得到0作为计数,但是你在第二个代码块中加入了jobtitle。如果没有,你的第一个代码按预期工作,如果有任何数据为null,请为每个列提供inull(列,'')

所以查询将是

SELECT COUNT(*) FROm Job j
FULL OUTER JOIN [DB2.dbo.job jc ON j.jobTitle = jc.jobTitle
WHERE j.AMID = jc.amid
AND j.ClientID = jc.clientID
AND j.personID = jc.ClientID
AND j.JobReceivedDate = jc.JobReceivedDate