【发布时间】: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