【发布时间】:2014-02-28 07:43:26
【问题描述】:
在 sql server 2005 中将两个带有“-”的 nvarchar(20) 列连接到一个 nvarchar(100) 时,我遇到了一个非常奇怪的行为。 这是简化的更新声明:
UPDATE tbl3
SET tbl3.col1 = t1.col1+' - '+t2.col1
FROM
tbl1 AS t1
INNER JOIN
tbl2 AS t2 ON 1=1
INNER JOIN
tbl3 AS t3
ON
t3.col2 = t1.col2+t2.col2
;
以下是一些记录的结果(单引号不在列中,仅代表它的开始和结束位置):
tbl1.col1:'Saídos'
tbl2.col1.1stRow:'Salário rendim.mens.'
tbl2.col1.2ndRow:'Assalariados por mês'
第一次更新:
tbl3.col1.1stRow:'Salário rendim.mens.'
tbl3.col1.2ndRow:'Saídos - Assalariados por mês'
第二次更新:
tbl3.col1.1stRow:'Saídos - Salário rendim.mens'
tbl3.col1.2ndRow:'Saídos - Assalariados por mê'
第三次更新:
tbl3.col1.1stRow:'Saídos - Salário rendim.mens'
tbl3.col1.2ndRow:'Saídos - Assalariados por mê'
第四次更新:
tbl3.col1.1stRow:'Saídos - Salário rendim.mens.'
tbl3.col1.2ndRow:'Saídos - Assalariados por mê'
如前所述,tbl1.col1 和 tbl2.col1 是 nvarchar(20),tbl3.col1 是 nvarchar(100) 在表设计器中,所有 3 列的 Collation 设置为 ,并且数据库 Collation 设置为 Latin1_General_CI_AS。
欢迎任何帮助或疑难解答,谢谢!
【问题讨论】:
-
我不知道是什么原因造成的,但如果可以的话,请使用 Unicode 字符类型。像这样的问题就会消失。
-
正如你所建议的,我在所有表中都更改为 nvarchar,仍然得到相同的奇怪行为......
-
那么,我能想到的唯一原因是“令人惊讶”的数据(尽管我想不出任何可能发生这种情况的方式)。尝试在 sqlfiddle.com 上创建一个可执行的 repo,以便我们可以使用它。我刚试过
SELECT N'Salário rendim.mens.' + N'Saídos - Assalariados por mês',效果很好。 -
其他原因:仍然存在排序规则问题或涉及非 unicode 数据类型而您没有注意到它。创建一个 repo(例如,通过编写表格脚本)可以让您找到问题。
-
我以前从未见过此类错误。有趣又讨厌。
标签: sql-server sql-server-2005 concatenation collation nvarchar