Конфликт столбцов SQL Server 2008 - как решить проблему?

Для упрощения, POC, у меня есть следующий запрос, используя столбцы с символами:

select AH_NAME1 from GGIMAIN.SYSADM.BW_AUFTR_KOPF
union
select AH_NAME1 from GGI2014.SYSADM.BW_AUFTR_KOPF

и я получаю следующую ошибку:

Msg 468, уровень 16, состояние 9, строка 2
Не удается разрешить конфликт сортировки между "SQL_Latin1_General_CP1_CI_AS" и "Latin1_General_CS_AS" в операции UNION.

GGI2014 действительно был создан с помощью сортировки SQL_Latin1_General_CP1_CI_AS. Это было изменено в SMS, и экземпляр был перезапущен, также в SMS.

Когда я смотрю в СМС, а также запрос:

select name, collation_name from sys.databases

все указывает на то, что как GGIMAIN, так и GGI2014 сопоставлены Latin1_General_CS_AS.

Есть ли у кого-нибудь советы о том, что еще нужно сделать?

Спасибо,

Matt

Ответ 1

select AH_NAME1 COLLATE DATABASE_DEFAULT from GGIMAIN.SYSADM.BW_AUFTR_KOPF
union
select AH_NAME1 COLLATE DATABASE_DEFAULT from GGI2014.SYSADM.BW_AUFTR_KOPF

Если я ошибаюсь, изменение сортировки базы данных не изменяет сортировку уже существующих объектов. Последствия будут затронуты только новыми объектами.

Ответ 2

Попробуйте это (возможно, у вас есть столбцы с разными настройками) -

SELECT AH_NAME1 COLLATE database_default
FROM GGIMAIN.SYSADM.BW_AUFTR_KOPF

UNION

SELECT AH_NAME1 COLLATE database_default
FROM GGI2014.SYSADM.BW_AUFTR_KOPF

Ответ 3

Я добавляю сортировку для каждого поля запроса

SELECT Field1 collate default_database
,field2 collate default_database
,fieldn collate default_database
From DB1.dbo.table_x
UNION ALL
SELECT Field1 collate default_database
,field2 collate default_database
,fieldn collate default_database
From DB2.dbo.table_y

PD.одно в запросе, который дает ошибку

Я надеюсь, что это сработает, и я избавил их от неприятностей.