Sql 插入到-帮助将记录插入到ID不存在的表中
我有一个数据库包含HR输入的员工记录,另一个数据库包含一个表,该表包含来自这些员工的匹配信息。我需要的帮助是从人力资源数据库收集员工,然后检查目标数据库中是否已经存在该员工,如果存在则跳过,如果不存在则创建记录 以下是迄今为止我所掌握的内容,但如何检查目标数据库中是否已存在该员工的记录以及如何使其跳过或插入新记录,这让我感到困惑: 问题1:Sql 插入到-帮助将记录插入到ID不存在的表中,sql,sql-server,database,Sql,Sql Server,Database,我有一个数据库包含HR输入的员工记录,另一个数据库包含一个表,该表包含来自这些员工的匹配信息。我需要的帮助是从人力资源数据库收集员工,然后检查目标数据库中是否已经存在该员工,如果存在则跳过,如果不存在则创建记录 以下是迄今为止我所掌握的内容,但如何检查目标数据库中是否已存在该员工的记录以及如何使其跳过或插入新记录,这让我感到困惑: 问题1: Insert INTO MainDB.dbo.employees (DriverID, Name, EntityID, EmployeeTypeID, S
Insert INTO MainDB.dbo.employees (DriverID, Name, EntityID, EmployeeTypeID, SecureEmployee, Inactive, CreatedDateTime, CreatedBy)
SELECT a.DET_NUMBERA AS DriverId
, LTRIM(RTRIM(a.DET_SURNAMEA)) + ' ' + LTRIM(RTRIM(a.DET_G1_NAME1A)) AS FullName
, 1 as EntityID
, 1 as EmployeeTypeID
, 0 as SecureEmployee
, 0 as inactive
, GETDATE() as CreatedDateTime
, 'BRAD' as CreatedBy
FROM
(
SELECT Emp_Details.DET_NUMBERA, DET_SURNAMEA, DET_G1_NAME1A, PYD_LOCN_CDA, PYD_COMPANYA , POS_STATUSA, POS_ENDD, Emp_Salary_Main.SMN_DATEC, Emp_Salary_Main.SMN_CLASSA, POS_STARTC
FROM chrisbflprod.dbo.EMDET Emp_Details
INNER JOIN chrisbflprod.dbo.EMPAY Emp_Pay ON Emp_Details.DET_NUMBERA=Emp_Pay.DET_NUMBERA
INNER JOIN chrisbflprod.dbo.EMPOS Emp_Position ON Emp_Details.DET_NUMBERA=Emp_Position.DET_NUMBERA
INNER JOIN chrisbflprod.dbo.EMSAL Emp_Salary_Main ON Emp_Details.DET_NUMBERA=Emp_Salary_Main.DET_NUMBERA
WHERE Emp_Pay.PYD_COMPANYA='VIL'
) a INNER JOIN
(
SELECT MAX(SMN_DATEC) AS MAX_DATE_SAL, DET_NUMBERA FROM chrisbflprod.dbo.EMSAL Emp_Salary
--- (test employeeID) WHERE DET_NUMBERA='0000026'
GROUP BY DET_NUMBERA
) b ON a.DET_NUMBERA=b.DET_NUMBERA
INNER JOIN
(
Select MAX(POS_STARTC) AS MAX_DATE_POS, DET_NUMBERA FROM chrisbflprod.dbo.EMPOS
GROUP BY DET_NUMBERA
) c ON a.DET_NUMBERA=c.DET_NUMBERA
WHERE a.DET_NUMBERA=b.DET_NUMBERA AND a.SMN_DATEC=b.MAX_DATE_SAL
AND a.DET_NUMBERA=c.DET_NUMBERA AND a.POS_STARTC=c.MAX_DATE_POS AND
a.POS_ENDD IS NULL OR a.POS_ENDD=''
ORDER BY DriverID
上述过程盲目地检查源数据库中存在的记录,并简单地将它们插入到目标数据库中。可以想象,每次运行时,目标数据库中的所有内容都会一次又一次地重复。我需要做的是检查目标数据库中是否已经存在仅与DriverID匹配的记录
非常感谢所有专业人士提供的任何帮助。添加此条件
......
WHERE a.DET_NUMBERA = b.DET_NUMBERA
AND a.SMN_DATEC = b.MAX_DATE_SAL
and not exists (select 1 from MainDB.dbo.employees emp where a.DET_NUMBERA = emp.DriverID)
....
或
可能在这里
WHERE Emp_Pay.PYD_COMPANYA = 'VIL'
and not exists (select 1 from MainDB.dbo.employees emp where Emp_Details.DET_NUMBERA = emp.DriverID)
查看MERGE命令的WHEN NOT MATCHED部分。看到这个问题的答案了。感谢程序员43229,这帮了我很大的忙,我现在已经让它正常工作了。。。太棒了,所有的工作都是罗托马斯做的。因为这个答案对你有帮助,所以通过投票向他们表示感谢。也就是说,如果你还没有回答yetHi Pradeep-你的答案很简单,效果很好,谢谢你抽出时间来帮助我。