Sql 如果现有记录的所有列都相同,则不执行任何操作的逻辑

Sql 如果现有记录的所有列都相同,则不执行任何操作的逻辑,sql,sql-server,Sql,Sql Server,我有一个包含一些记录的sql表,每天我都要将记录导入表中,但我不想导入10个字段中有5个字段没有更改的记录。例如: Table_A A(PK) B C D E 1 2 2 3 4 现在,如果我要导入一条记录,并且a、B、C和D列中的值没有更改,那么我不想将该记录导入a列 下面是我正在尝试运行的查询 insert into STG_EmployeeMaster (Name,PrefName,GPN,BU,BUName,SMU,SMUName,OU,Sector,Rank,MU,MUNam

我有一个包含一些记录的sql表,每天我都要将记录导入表中,但我不想导入10个字段中有5个字段没有更改的记录。例如:

Table_A
A(PK) B C D E
1     2 2 3 4
现在,如果我要导入一条记录,并且a、B、C和D列中的值没有更改,那么我不想将该记录导入a列

下面是我正在尝试运行的查询

insert into STG_EmployeeMaster
(Name,PrefName,GPN,BU,BUName,SMU,SMUName,OU,Sector,Rank,MU,MUName,EmpStatus,Grade,StartDate,StdHrs,SSL1,SSL2,City,StateProv,Country,CounselorName,CFL,FTE,LastPromoDate,CurEmpDate,BULevel2,ExpReturnDate,GUI,Ac_Flg,Exist_Flg,Ac_Flg_StartDate,EmpSubCompetency,SectorTagClassification)

select 
t1.Name,
t1.PrefName,
t1.GPN,
t1.BU,
t1.BUName,
t1.SMU,
t1.SMUName,
t1.OU,
t1.Sector,
t1.Rank,
t1.MU,
t1.MUName, 
t1.EmpStatus,
t1.Grade,
t1.StartDate,
t1.StdHrs,
t1.SSL1,
t1.SSL2,
t1.City,
t1.StateProv,
t1.Country,
t1.CounselorName,
t1.CFL,
t1.FTE,
t1.LastPromoDate,
t1.CurEmpDate,
t1.BULevel2,
t1.ExpReturnDate, 
t1.GUI,
'Y',
case when t1.GPN in (select distinct GPN from STG_EmployeeMaster)
then 'N' else 'Y' end,
getdate(),
t3.EmpSubCompetency,
t3.SectorTagClassification

from Temp_EmployeeMaster t1

left join SRC_EMS t3
on t1.GPN=t3.resourceGPN
left join STG_EmployeeMaster t2 
on t1.GPN=t3.ResourceGPN

where not exists( select 1
from dbo.stg_employeemaster t2
where t2.GPN = t1.GPN
and t2. BU = t1.BU
and t2.SMU = t1.SMU
and t2.OU = t1.OU
and t2.Sector =  t1.Sector
and t2.Rank = t1.Rank
and t2.MU = t1.MU
and t2.Grade =  t1.Grade
and t2.EmpSubCompetency = t1.EmpSubCompetency
and t2.SectorTagClassification = t1.SectorTagClassification
and t2.City = t1.City
);

您可以使用
不存在

insert into table_a( . . . )
    select . . .
    from <records to insert) t
    where not exists (select 1
                      from table_a a
                      where a.a = t.a
                     );
插入表a(…)
选择。

从可以使用
不存在

insert into table_a( . . . )
    select . . .
    from <records to insert) t
    where not exists (select 1
                      from table_a a
                      where a.a = t.a
                     );
插入表a(…)
选择。

如果你想让我们有机会帮忙,你需要在这里提供一些细节。正如文章所说,没有足够的信息来帮助你。你说10分之5,然后用一个例子,用5分之3。如果非关键值匹配,则更新唯一关键值列。令人困惑。如果你想让我们有机会帮助你,你需要在这里提供一些细节。正如文章所说,没有足够的信息来帮助你。你说10分之5,然后用一个例子,用5分之3。如果非关键值匹配,则更新唯一关键值列。令人困惑。我使用上述结构运行了查询,但它从过去15分钟开始运行。Temp_EmployeeMaster表有大约20k条记录,STG_EmployeeMaster表有大约15k条记录。它运行这么长时间是正常的还是陷入了一个循环@gordonalso,为什么我要选一个呢?@quentious\u learner。嗯,如果
a
表a
的主键,那么这应该非常快。您可能想问另一个问题,其中包含有关表和此查询的更多信息,并询问如何加快查询速度。
select 1
只是为
exists
子查询返回某些内容的一种方式。我使用上述结构运行了查询,但它在过去15分钟内一直在运行。Temp_EmployeeMaster表有大约20k条记录,STG_EmployeeMaster表有大约15k条记录。它运行这么长时间是正常的还是陷入了一个循环@gordonalso,为什么我要选一个呢?@quentious\u learner。嗯,如果
a
表a
的主键,那么这应该非常快。您可能想问另一个问题,其中包含有关表和此查询的更多信息,并询问如何加快查询速度。
select 1
只是为
exists
子查询返回内容的一种方式。