在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áriorendim.mens。'
tbl2.col1.2ndRow :'Assalariadospormês'
第一次更新:
tbl3.col1.1stRow :'Saláriorendim.mens。'
tbl3.col1.2ndRow :'Saídos - Assalariadospormês'
第二次加注:
tbl3.col1.1stRow :'Saídos - Salñdel rendim.mens'
tbl3.col1.2ndRow :'Saídos - Assalariadospormê'
3 upate:
tbl3.col1.1stRow :'Saídos - Salñdel rendim.mens'
tbl3.col1.2ndRow :'Saídos - Assalariadospormê'
第4次更新:
tbl3.col1.1stRow :'Saídos - Saláriorendim.mens。'
tbl3.col1.2ndRow :'Saídos - Assalariadospormê'
如上所述,tbl1.col1和tbl2.col1是nvarchar(20),而tbl3.col1是nvarchar(100) 表格设计器中的所有3列都设置为Collation,数据库Collation设置为Latin1_General_CI_AS。
欢迎任何帮助或疑难解答,谢谢!
答案 0 :(得分:0)
知道了,
' - '
需要是unicode,例如N' - '
:
UPDATE tbl3
SET tbl3.col1 = t1.col1+N' - '+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
;
如果列是varchar(不是unicode),这也有效,但我建议总是使用nvarchar。