Ошибка SQL Server «Неявное преобразование, поскольку сопоставление значения не разрешено из-за конфликта сопоставления». - PullRequest
26 голосов
/ 05 октября 2010

Я получаю эту ошибку при разработке хранимой процедуры

Неявное преобразование значения varchar в varchar не может быть выполнено, потому что сопоставление значения не разрешено из-за конфликта сопоставления.

утверждение таково

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1
UNION ALL
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2

, но если, если сделать это, он также выдаст ту же ошибку

 Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1
 UNION ALL
 Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2

На самом деле этот код написан кем-то другим, и я просто редактирую код, не знаю, почему он добавил COLLATE DATABASE_DEFAULT, но если я удаляю его, выдает ту же ошибку

Неявное преобразование значения varchar в varchar невозможно, поскольку сопоставление значения не разрешено из-за конфликта сопоставления.

Ответы [ 2 ]

52 голосов
/ 05 октября 2010

Скорее всего, вам понадобится COLLATE в обоих местах.

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1
UNION ALL
Select '' COLLATE DATABASE_DEFAULT AS Place, 'Arizona' As State, Country FROM DEPT2

Редактировать: он может понадобиться на каждой строке, если вы получаете его в одном месте

Select
    City COLLATE DATABASE_DEFAULT AS Place,
    State COLLATE DATABASE_DEFAULT AS State,
    Country COLLATE DATABASE_DEFAULT AS Country
FROM DEPT1
UNION ALL
Select
    '' COLLATE DATABASE_DEFAULT,
    'Arizona' COLLATE DATABASE_DEFAULT ,
    Country COLLATE DATABASE_DEFAULT
FROM DEPT2

Edit2:

Это происходит потому, что ваша сортировка столбцов, вероятно, отличается от вашей сортировки базы данных. Таким образом, у «City» есть одно сопоставление, а у строковых констант - другое.

1 голос

ALTER TABLE DEPT1 и DEPT2, чтобы результирующие определения таблиц не содержали COLLATE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...