У меня есть следующий код
SELECT tA.FieldName As [Field Name],
COALESCE(tO_A.[desc], tO_B.[desc], tO_C.Name, tA.OldVAlue) AS [Old Value],
COALESCE(tN_A.[desc], tN_B.[desc], tN_C.Name, tA.NewValue) AS [New Value],
U.UserName AS [User Name],
CONVERT(varchar, tA.ChangeDate) AS [Change Date]
FROM D tA
JOIN
[DRTS].[dbo].[User] U
ON tA.UserID = U.UserID
LEFT JOIN
A tO_A
on tA.FieldName = 'AID'
AND tA.oldValue = CONVERT(VARCHAR, tO_A.ID)
LEFT JOIN
A tN_A
on tA.FieldName = 'AID'
AND tA.newValue = CONVERT(VARCHAR, tN_A.ID)
LEFT JOIN
B tO_B
on tA.FieldName = 'BID'
AND tA.oldValue = CONVERT(VARCHAR, tO_B.ID)
LEFT JOIN
B tN_B
on tA.FieldName = 'BID'
AND tA.newValue = CONVERT(VARCHAR, tN_B.ID)
LEFT JOIN
C tO_C
on tA.FieldName = 'CID'
AND tA.oldValue = tO_C.Name
LEFT JOIN
C tN_C
on tA.FieldName = 'CID'
AND tA.newValue = tN_C.Name
WHERE U.Fullname = @SearchTerm
ORDER BY tA.ChangeDate
При выполнении кода я получаю сообщение об ошибке, вставленное в заголовок после добавления двух объединений для таблицы C. Я думаю, что это может иметь какое-то отношение к тому факту, что я использую SQL Server 2008 и восстановил копию этой базы данных в моя машина которая 2005 года.
источник
Я делаю следующее:
Работает каждый раз. :)
источник
Используйте
collate
предложение в вашем запросе:Возможно, у меня не совсем правильный синтаксис (проверьте BOL), но вы можете сделать это, чтобы оперативно изменять параметры сортировки для запроса - вам может понадобиться добавить условие для каждого соединения.
редактировать: я понял, что это было не совсем правильно - предложение сортировки идет после поля, которое нужно изменить - в этом примере я изменил сортировку по
tA.oldValue
полю.источник
Определите поля, для которых он выдает эту ошибку, и добавьте к ним следующее: COLLATE DATABASE_DEFAULT
В поле Код объединены две таблицы:
Обновите ваш запрос:
источник
Это может легко случиться, когда у вас есть 2 разные базы данных и особенно 2 разные базы данных с 2 разных серверов. Лучший вариант - изменить его на общую коллекцию и выполнить объединение или сравнение.
источник
@ Валькирия потрясающий ответ. Думаю, я привел случай, когда выполнение того же с подзапросом внутри хранимой процедуры, как я подумал, работает ли ваш ответ в этом случае, и это действительно здорово.
источник
В критерии где добавить
collate SQL_Latin1_General_CP1_CI_AS
Это работает для меня.
источник
Основная причина в том, что база данных сервера sql, из которой вы взяли схему, имеет параметры сортировки, которые отличаются от вашей локальной установки. Если вы не хотите беспокоиться о сопоставлении, переустановите SQL Server локально, используя то же сопоставление, что и база данных SQL Server 2008.
источник
ошибка (не удается разрешить конфликт сопоставления между ....) обычно возникает при сравнении данных из нескольких баз данных.
поскольку вы не можете изменить параметры сортировки баз данных сейчас, используйте COLLATE DATABASE_DEFAULT.
источник
У меня было что-то подобное раньше, и мы обнаружили, что сопоставление между двумя таблицами было разным.
Убедитесь, что они одинаковы.
источник
Благодаря ответу marc_s я решил свою первоначальную проблему - вдохновился сделать еще один шаг и опубликовать один подход к преобразованию всей таблицы за раз - скрипт tsql для генерации операторов alter column:
получает: ALTER TABLE Партнер ALTER COLUMN myTable NVARCHAR (4000) COLLATE Latin1_General_CI_AS NOT NULL
Я признаюсь, что озадачен необходимостью col.max_length / 2 -
источник
Для тех, у кого есть сценарий CREATE DATABASE (как было в моем случае) для базы данных, которая вызывает эту проблему, вы можете использовать следующий сценарий CREATE, чтобы сопоставить параметры сортировки:
или
Это применяет желаемое сопоставление ко всем таблицам, что было именно тем, что мне нужно. Идеально, чтобы попытаться сохранить сопоставление одинаковым для всех баз данных на сервере. Надеюсь это поможет.
Дополнительная информация по следующей ссылке: SQL SERVER - Создание базы данных с разным сопоставлением на сервере.
источник
Я использовал содержимое этого сайта для создания следующего сценария, который изменяет параметры сортировки всех столбцов во всех таблицах:
источник
Проверьте уровень сопоставления, который не соответствует (сервер, база данных, таблица, столбец, символ).
Если это сервер, эти шаги помогли мне один раз:
Запустите эту команду:
sqlservr -m -T4022 -T3659 -s"name_of_insance" -q "name_of_collation"
Запустите ваш sql сервер:
net start name_of_instance
Проверьте параметры сортировки вашего сервера еще раз.
Вот больше информации:
https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/
источник
Если это происходит по всей вашей БД, то лучше изменить параметры сортировки БД следующим образом:
Ссылка здесь
источник
Добавлен код в ответ @ JustSteve для работы со столбцами varchar и varchar (MAX):
источник
Чтобы решить эту проблему в запросе без изменения какой-либо базы данных, вы можете привести выражения к другой стороне знака «=» с помощью
как предложено здесь .
источник
У меня была похожая ошибка (не удалось разрешить конфликт сопоставления между «SQL_Latin1_General_CP1_CI_AS» и «SQL_Latin1_General_CP1250_CI_AS» в операции INTERSECT), когда я использовал старый драйвер jdbc.
Я решил эту проблему, загрузив новый драйвер от Microsoft или проект с открытым исходным кодом jTDS .
источник
вот что мы сделали, в нашей ситуации нам нужно выполнить специальный запрос, используя ограничение даты по требованию, и запрос определен в таблице.
Наш новый запрос должен сопоставлять данные между различными базами данных и включать данные из обеих из них.
Кажется, что COLLATION отличается между базой данных, которая импортирует данные из системы iSeries / AS400, и нашей базой данных отчетов - это может быть связано с конкретными типами данных (такими как греческие акценты в именах и т. Д.).
Таким образом, мы использовали следующее предложение join:
источник
Вы можете легко сделать это, используя 4 простых шага
источник
источник
Возможно, у вас нет проблем с сопоставлением в вашей базе данных, но если вы восстановили копию своей базы данных из резервной копии на сервере с сопоставлением, отличным от исходного, и ваш код создает временные таблицы, эти временные таблицы наследуют параметры сопоставления от сервер и будут конфликты с вашей базой данных.
источник
источник
У меня было похожее требование; документирование моего подхода здесь для любого с похожим сценарием ...
сценарий
Решение
Используйте Сравнение схем SQL Server (из Инструментов данных SQL Server / Visual Studio), чтобы сравнить источник (чистая установка) с местом назначения (БД с неверным сопоставлением).
В моем случае я сравнил две базы данных напрямую; хотя вы могли бы работать через проект, чтобы позволить вам вручную настроить куски между ...
Object Types
выберите только те типы, которые вас интересуют (для меня это было толькоViews
иTables
)General
выбором:DELETE
папке и выбравEXCLUDE
.CREATE
объектов (здесь, поскольку они не существуют в цели, у них не может быть неправильного сопоставления там; вопрос, должны ли они существовать, является вопросом для другой темы).Update
чтобы нажать измененияЭто все еще требует определенных ручных усилий (например, проверка того, что вы влияете только на параметры сортировки), но оно обрабатывает зависимости для вас.
Также вы можете сохранить проект базы данных с допустимой схемой, чтобы вы могли использовать универсальный шаблон для ваших БД, если у вас есть более 1 для обновления, при условии, что все целевые БД должны иметь одну и ту же схему.
Вы также можете использовать поиск / замену файлов в проекте базы данных, если хотите массово изменить настройки (например, чтобы создать проект из недопустимой базы данных, используя сравнение схем, изменить файлы проекта, а затем переключить источник / цель в сравнение схемы, чтобы отправить ваши изменения обратно в БД).
источник