SQL - 重音字符未更新

SQL - Accented characters not updating

大家好,欢迎来到我的噩梦。我正在准备一个数据库,以便 运行 一些 SSIS 包将所需的数据迁移到数据仓库中。

在 运行 安装 SSIS 包之前,我正在将带有重音字符的客户名称更新为非重音字符,因为这会导致我的 DimCustomer Population 包失败。

我快速有效地使用 运行 和 运行 的查询(我实现了梦想)但是,我现在面临三个记录,这导致我的 UPDATE 语句 运行 和 运行 我必须在大约一个小时后取消查询,因为这是不可接受的。

这些名称中包含的字符是:í á。我怀疑这些只能以特定格式识别(我似乎找不到)。


我 运行 的查询和更新如下供您阅读:

SELECT lastname COLLATE latin1_general_ci_ai      AS 'LastName',
       MIN(lastname COLLATE latin1_general_ci_as) AS 'CorrectLastName',
       MAX(lastname COLLATE latin1_general_ci_as) AS 'IncorrectLastName'
INTO   #lastname
FROM   learner WITH (nolock)
GROUP  BY lastname COLLATE latin1_general_ci_ai
HAVING MIN(lastname COLLATE latin1_general_ci_as) <> MAX(lastname COLLATE latin1_general_ci_as);

IF Object_id ('tempdb..#LastNameUpdate') IS NOT NULL
  DROP TABLE #lastnameupdate

SELECT L.learnerid,
       L.lastname,
       LN.correctlastname,
       LN.incorrectlastname
INTO   #lastnameupdate
FROM   learner L WITH (nolock)
       INNER JOIN #lastname AS LN
               ON L.lastname = LN.incorrectlastname

UPDATE L
SET    L.lastname = LNU.correctlastname
FROM   learner L
       INNER JOIN #lastnameupdate AS LNU
               ON L.learnerid = LNU.learnerid  

如果您需要更多信息,请提出任何问题,我是预先发布的解决方案和(即使有点悲伤)一般阅读的常规堆栈检查员。任何信息、指导或建议将不胜感激。谢谢!

只是为了加快速度: 您可以在创建#lastname table.

后添加以下内容
Delete from #lastname where CorrectLastName = incorrectLastName

我想如果你只有几个不正确的姓氏,这会加快很多。

您也可以尝试避免创建 table #lastnameupdate.
因为使用子查询,您可以执行相同的操作。
这也应该加快整体速度。