a.Name NVarchar(40)

b.Name Varchar(40)

 

 

MERGE a AS TARGET

USING (
  SELECT 
     id,name  FROM b  
) AS SOURCE ON (TARGET.[id] 
= SOURCE.[id])

WHEN MATCHED AND CHECKSUM(TARGET.Name)
!= CHECKSUM(CONVERT(NVARCHAR(40),SOURCE.[Name])) THEN
 UPDATE SET TARGET.[Name] 
= SOURCE.[Name],
            
WHEN NOT MATCHED BY TARGET THEN
    INSERT (
    [id]
   ,[Name] 
   ) VALUES(
    SOURCE.[ID]
   ,SOURCE.[Name] 
   )   
WHEN NOT MATCHED BY SOURCE THEN
 Delete ....

 

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

需要把

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

变成

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

后才可以同步。

看起来好像是varchar nvarchar转换的问题。

 

 

相关文章:

  • 2022-12-23
  • 2021-12-23
  • 2021-12-22
  • 2021-04-08
  • 2021-05-08
  • 2021-04-13
  • 2021-09-22
猜你喜欢
  • 2021-12-24
  • 2021-05-09
  • 2022-12-23
  • 2021-12-12
  • 2021-12-06
相关资源
相似解决方案