【问题标题】:SQL - Accented characters not updatingSQL - 重音字符不更新
【发布时间】:2017-03-09 23:44:52
【问题描述】:

大家好,欢迎来到我的噩梦。我正在准备一个数据库,以便运行多个 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  

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

【问题讨论】:

  • one of my answers 中,我提供了一个函数,可以将任何字符串拆分为单个字符,并在自定义替换规则后重新连接该字符串...这是肯定的! - 使用更大的数据并不快,但你可能会看看它......

标签: sql-server tsql ssis accent-insensitive


【解决方案1】:

只是为了加快速度: 您可以在创建#lastname 表后添加以下内容。

Delete from #lastname where CorrectLastName = incorrectLastName

我认为,如果您只有几个不正确的姓氏,这将加快速度。

您也可以尝试避免创建表#lastnameupdate。
因为使用子查询代替你可以做同样的事情。
这也应该加快整体速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多