Подтвердить что ты не робот

Ошибка SQL Server "Неявное преобразование из-за того, что сопоставление значения не разрешено из-за конфликта сортировки".

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

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

выглядит так:

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

но If If do this, это также дает ту же ошибку

 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 невозможно выполнить, потому что сортировка значения не разрешена из-за конфликта сортировки.

4b9b3361

Ответ 1

Скорее всего, вам понадобится 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:

Это происходит потому, что сопоставление столбцов, вероятно, отличается от сортировки базы данных. Таким образом, "Город" имеет одно сопоставление, но строковые константы имеют другой.

Ответ 2

ALTER TABLE DEPT1 и DEPT2, чтобы итоговые определения таблиц не содержали COLLATE