SQL MERGE 语句不区分大小写

SQL MERGE statement not case sensitive

我有以下 MERGE 声明:

MERGE TargetTable t
USING SourceTable s ON (t.ID = s.ID)

WHEN MATCHED 
     AND EXISTS (SELECT s.Day, s.Date, s.Name
                 EXCEPT
                 SELECT t.Day, t.Date, t.Name)
    THEN UPDATE 
         SET t.Day = s.Day,
             t.Date = s.Date,
             t.Name = s.Name

WHEN NOT MATCHED BY TARGET
    THEN INSERT (ID, Day, Date, Name)
         VALUES (s.ID, s.Day, s.Date, s.Name);

栏目比较多,为了方便阅读,我只是缩短了栏目。

因此,当我 运行 它工作正常,除了:如果我更改源 table 中某些内容的大小写,它不会在目标 table 中更新。我相信这可以通过对 UTF8 使用 COLLATE 来解决,但是无法弄清楚。

编辑:我的意思是,如果我更改源代码 table 中的某些内容:出于测试目的,我将执行 MERGE,然后更改一个 varchar 字段,但仅更改字母的大小写。然后,当我再次 运行 MERGE 时,该更改不会传播到目标 table 因为它没有将其视为更改 IE,它不区分大小写

谢谢

使用区分大小写的排序规则来限定您的列。

假设您的 varchar 列是使用不区分大小写的排序规则 SQL_Latin1_General_CP1_CI_AS 定义的(明确地,或者通过数据库的默认方式)。使用 EXCEPT 的子查询将变为:

SELECT s.Day, s.Date, s.Name COLLATE SQL_Latin1_General_CP1_CS_AS
EXCEPT
SELECT t.Day, t.Date, t.Name COLLATE SQL_Latin1_General_CP1_CS_AS

排序规则名称中的 CS 代表区分大小写。 CI 不区分大小写。