Sql server 比较两个SQL表中的唯一单元格并更新主表

Sql server 比较两个SQL表中的唯一单元格并更新主表,sql-server,database,Sql Server,Database,我正在使用SQL Server 2017,几个小时来我一直在努力解决这个问题。我的目标是比较两个表,只插入基于唯一单元格的新行。所有列都有一个ID号,但我没有分配主键。我的目标是仅在没有任何条件匹配时添加包含唯一单元格的额外行。这就是我的表格现在的设置方式 旧的数据表名是Test1 FName LNname Address City State Zipcode Phone Phone2 ID Frank Smith 444 Main Y'a

我正在使用SQL Server 2017,几个小时来我一直在努力解决这个问题。我的目标是比较两个表,只插入基于唯一单元格的新行。所有列都有一个ID号,但我没有分配主键。我的目标是仅在没有任何条件匹配时添加包含唯一单元格的额外行。这就是我的表格现在的设置方式

旧的数据表名是Test1

FName  LNname   Address    City   State  Zipcode   Phone          Phone2    ID
Frank  Smith    444 Main  Y'all   TX     77484     281-788-9898   NULL      1
Thomas Parker   343 Tire  Y'all   TX     77484     281-788-5453   NULL      2
Ben    Krull    232 Wheel Y'all   TX     77484     281-788-9535   NULL      3
新的数据表名是Test2

FName  LNname   Address    City State Zipcode  Phone          Phone2       ID
Frank  Smith    444 Main  Y'all TX    77484    281-788-9898   NULL         1
Thomas Parker   343 Tire  Y'all TX    77484    281-788-5453   NULL         2
Ben    Krull    232 Wheel Y'all TX    77484    281-788-9535   NULL         3
Juan   Roberto  444 Gas   Y'all TX    77484    281-788-3434   NULL         4
Ben    Krull    232 Wheel Y'all TX    77484    281-788-9535   713-545-4353 5
如您所见,ID的1、2和3在两个表中是相同的。ID-4是一个完全唯一的行,由于Phone2条目,ID-5也是一个完全唯一的行。我找到了一些代码,并对其进行了一些修改,以匹配我关心的标题,从而帮助我确定哪些条目是重复的或不重复的。这就是让我发疯的代码

INSERT TEST1 (Name 
    ,Last_Name 
    ,Address 
    ,City 
    ,State 
    ,Zip_Code 
    ,Phone 
    ,Phone2 
)
SELECT Name
    ,Last_Name 
    ,Address 
    ,City 
    ,State 
    ,Zip_Code 
    ,Phone 
    ,Phone2 

FROM TEST2
WHERE TEST2.NAME not in (select Name from test1)
AND   TEST2.Address not in (select Address from test1)
AND   TEST2.City not in (select City from test1)
AND   TEST2.State not in (select State from test1)
AND   TEST2.Zip_Code not in (select Zip_Code from test1)
AND   TEST2.Phone not in (select Phone from test1)
AND   TEST2.Phone2 not in (select phone2 from test1)
我试图匹配所有字段,如果找到唯一的单元格,新行将输入到旧的_数据表中。执行后我没有看到任何错误,但也没有发生任何事情。有趣的是,如果我删除了这行下面的所有代码,其中TEST2.NAME不在test1 ID-4的select NAME中,Juan Roberto会被转移,但ID-5不会发生任何事情


我真的开始想,哪里不能用来比较副本和修改或添加条目,但我可能错了。合并功能会很棒,但我很高兴只使用前者,因为我总是可以运行不同的脚本来清理表中的重复。我希望有人能给我指出正确的方向,因为我在不同的表格中有数百万行需要比较和删减。谢谢

试试下面的代码,我不确定它是否适合您,因为我没有测试过它

SELECT * INTO #TEMP FROM Test2(NOLOCK);

DELETE #TEMP
FROM   #TEMP
       INNER JOIN Test1
           ON #TEMP.NAME = Test1.NAME
              AND #TEMP.Address = Test1.Address
              AND #TEMP.City = Test1.City
              AND #TEMP.State = Test1.State
              AND #TEMP.Zip_Code = Test1.Zip_Code
              AND #TEMP.Phone = Test1.Phone
              AND #TEMP.Phone2 = Test1.Phone2 ;

INSERT INTO Test1
SELECT * FROM #TEMP;

请通读这个问题:Re我发现了一些代码-依我看,这不是开发人员应该采用的工作方式。我感谢@TimBiegeleisen提供的信息,它帮助了很多。