zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

SQL Server数据同步Merge的一个BUG及解决方法

2023-03-31 11:08:53 时间

本文我们主要介绍了SQL Server数据同步Merge的一个小漏洞以及解决的方案,通过以下的代码让我们来一起了解一下这一漏洞是怎么造成的以及它的解决方法吧。

假设有两个数据a.Name NVarchar(40)和b.Name Varchar(40),代码如下:

 

  1. MERGE a AS TARGET  
  2.  
  3. USING (  
  4.  
  5. SELECT   
  6.  
  7. id,name  
  8.  
  9. FROM b   
  10.  
  11. ) AS SOURCE ON (TARGET.[id] = SOURCE.[id])  
  12.  
  13. WHEN MATCHED AND CHECKSUM(TARGET.Name)!= CHECKSUM(CONVERT(NVARCHAR(40),SOURCE.[Name])) THEN  
  14.  
  15. UPDATE SET TARGET.[Name] = SOURCE.[Name],  
  16.  
  17. WHEN NOT MATCHED BY TARGET THEN  
  18.  
  19. INSERT (  
  20.  
  21. [id]  
  22.  
  23. ,[Name]   
  24.  
  25. ) VALUES(  
  26.  
  27. SOURCE.[ID]  
  28.  
  29. ,SOURCE.[Name]   
  30.  
  31. )   
  32.  
  33. WHEN NOT MATCHED BY SOURCE THEN  
  34.  
  35. Delete .... 

 

当b.name 以“-” 结束,如 “test-”  这种情况,merge不起作用。其他情况都还好。

需要把

 

  1. CHECKSUM(TARGET.Name)!= CHECKSUM(CONVERT(NVARCHAR(40),SOURCE.[Name])) 

 

变成

 

  1. CHECKSUM(CONVERT(NVARCHAR(40),TARGET.Name))!= CHECKSUM(SOURCE.[Name]) 

 

后才可以同步。

关于SQL Server数据同步Merge的知识就介绍到这里,希望能够带给您一些收获吧!

【编辑推荐】

  1. 如何启用Master Data Services的Web服务
  2. 如何Master Data Service调用API创建Model
  3. SQL Server数据库如何使用存储过程造批量数据
  4. SQL Server数据库如何将当前行和上下行合并查询
  5. 如何将SQL Server 2008的数据复制到MySQL数据库