конфликт сопоставления между "Hebrew_CI_AS" и "SQL_Latin1_General_CP1_CI_AS" - PullRequest
0 голосов
/ 25 февраля 2020

в какой-то процедуре, над которой я работаю, я пишу этот код:

update a
set a.custName = b.custName
from #x as a inner join pl_Customer as b on a.Company_Code = b.Company_Code and a.cust = b.Cust

и я получил эту ошибку:

Невозможно разрешить конфликт сопоставления между "Hebrew_CI_AS" и «SQL_Latin1_General_CP1_CI_AS» соответствует операции.

Я пытаюсь решить эту проблему следующим образом:

update a
set a.custName = b.custName
from #x as a inner join pl_Customer as b on a.Company_Code = b.Company_Code and a.cust = b.Cust
collate Latin1_General_CI_AI;

, но это все еще ошибка.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2020

В определении временной таблицы # x добавьте COLLATE DATABASE_DEFAULT в столбцы String, например

custName nvarchar(xx) COLLATE DATABASE_DEFAULT NOT NULL
2 голосов
/ 25 февраля 2020

Временные таблицы создаются с использованием параметров сортировки сервера по умолчанию. Похоже, что ваш сервер сортировки SQL_Latin1_General_CP1_CI_AS и базы данных (на самом деле, столбца) Hebrew_CI_AS или наоборот.

Вы можете преодолеть это с помощью collate database_default в определениях столбцов временной таблицы, например:

create #x (
    ID int PRIMARY KEY,
    Company_Code nvarchar(20) COLLATE database_default,
    Cust nvarchar(20) COLLATE database_default,
    ...
)

Это создаст столбцы, используя параметры сортировки текущей базы данных, а не сервера.

...