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

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

    MERGEaASTARGET USING( SELECT id,name FROMb )ASSOURCEON(TARGET.[id]=SOURCE.[id]) WHENMATCHEDANDCHECKSUM(TARGET.Name)!=CHECKSUM(CONVERT(NVARCHAR(40),SOURCE.[Name]))THEN UPDATESETTARGET.[Name]=SOURCE.[Name], WHENNOTMATCHEDBYTARGETTHEN INSERT( [id] ,[Name] )VALUES( SOURCE.[ID] ,SOURCE.[Name] ) WHENNOTMATCHEDBYSOURCETHEN Delete....

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

需要把

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

变成

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

后才可以同步。

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

【编辑推荐】

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