我有两个相同的数据库,一整堆数据从 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
来自评论的回答
在你加入的第一个代码块 (j.jobID AS NVARCHAR(20)) = jc.jobTitle 这就是为什么你得到 0 作为计数,但你在第二个代码块中加入职位。如果没有,您的第一个代码按预期工作,如果任何数据为空,请为每一列使用 inull(column,'')
所以查询将是
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句