1

Я испытываю очень странное поведение при объединении двух столбцов nvarchar (20) с '-' в nvarchar (100), в sql server 2005. Вот упрощенная Обновление отчета:sql server 2005 concatenate nvarchar, результаты иногда в странных символах

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 Mes'

первое обновление:

tbl3.col1.1stRow: 'Саларио rendim.mens.

tbl3.col1.2ndRow: 'Saídos - Assalariados Por Mes'

второй upate:

tbl3.col1.1stRow: 'Saídos - Salário rendim. MENS'

tbl3.col1.2ndRow: 'Saídos - Assalariados Por mê'

3nd upate:

tbl3.col1.1stRow: 'Saídos - Salário rendim.mens'

tbl3.col1.2ndRow: 'Saídos - Assalariados Por mê '

четвёртой upate:

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 set to и database Collation задано значение Latin1_General_CI_AS.

Любая помощь или устранение неполадок наиболее приветствуется, спасибо!

+1

Я не знаю, что вызывает это, но используйте символы символов Юникода, если можно. Проблемы, подобные этому, просто уходят. – usr

+0

, как вы предположили, я изменил значение nvarchar во всех таблицах, все равно получаю такое же странное поведение ... – RMiranda

+1

Тогда единственная причина, по которой я могу думать, это «удивительные» данные (хотя я не могу придумать, как это могло произойти). Попробуйте создать исполняемый репо на sqlfiddle.com, чтобы мы могли играть с ним. Я просто попробовал «SELECT N'Salário rendim.mens». + N'Saídos - Assalariados por mês'', и он отлично работает. – usr

ответ

0

Понял,

The ' - ' потребности быть юникода, как 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 (не юникод), но я бы посоветовал использовать NVARCHAR ВСЕГДА.

Смежные вопросы