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.
因为使用子查询,您可以执行相同的操作。
这也应该加快整体速度。
大家好,欢迎来到我的噩梦。我正在准备一个数据库,以便 运行 一些 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.
因为使用子查询,您可以执行相同的操作。
这也应该加快整体速度。