Pour simplifier, POC, j'ai la requête suivante, en utilisant des colonnes de caractères:
select AH_NAME1 from GGIMAIN.SYSADM.BW_AUFTR_KOPF
union
select AH_NAME1 from GGI2014.SYSADM.BW_AUFTR_KOPF
et j'obtiens l'erreur suivante:
Msg 468, niveau 16, état 9, ligne 2
Impossible de résoudre le conflit de classement entre "SQL_Latin1_General_CP1_CI_AS" et "Latin1_General_CS_AS" dans l'opération UNION.
GGI2014
a bien été créé avec la collation SQL_Latin1_General_CP1_CI_AS
. Cela a été modifié dans SMS et l'instance a été redémarrée, également dans SMS.
Quand je regarde dans les SMS, ainsi que la requête:
select name, collation_name from sys.databases
toutes les indications sont que GGIMAIN
et GGI2014
sont tous deux assemblés Latin1_General_CS_AS
.
Quelqu'un a-t-il des conseils sur ce qu'il reste à faire?
Merci,
Mat
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
Sauf erreur de ma part, la modification du classement de la base de données ne modifie pas le classement des objets existants. Seuls les nouveaux objets seront affectés
Essayez celui-ci (peut-être que vos colonnes ont un classement différent) -
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
J'ajoute un assemblage pour chaque champ de la requête
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.only dans la requête qui donne l'erreur
J'espère que ça marche et que je les ai sortis du pétrin