3 votes

Requête SQL Server contre deux bases de données liées utilisant des collations différentes

J'ai deux bases de données distantes dans le cadre d'une requête.

select p.ID,p.ProjectCode_VC,p.Name_VC,v.*
FROM [serverB].Projects.dbo.Projects_T p
LEFT JOIN [serverA].SOCON.dbo.vw_PROJECT v on
p.ProjectCode_VC = v.PROJ_CODE

Le problème est que le serveur A utilise la collation Latin1_General_BIN et le serveur B utilise Latin1_General_CP1_CP_AS et la requête refuse de s'exécuter.

Les deux serveurs sont des serveurs SQL 2000. Les deux bases de données sont figées et je ne peux donc pas modifier leurs collations, malheureusement.

Est-ce que vous savez comment faire pour que ça marche ?

Mise à jour : J'ai trouvé une solution alternative. Dans les propriétés du serveur lié, vous pouvez spécifier la collation du serveur lié à cet endroit.

9voto

Biri Points 4992

Il suffit d'ajouter la collation à votre sélection, par exemple :

select 
  p.ID,
  p.ProjectCode_VC,
  p.Name_VC,
  v.* 
FROM
  [serverB].Projects.dbo.Projects_T p 
  LEFT JOIN [serverA].SOCON.dbo.vw_PROJECT v on p.ProjectCode_VC 
    collate Latin1_General_Bin = v.PROJ_CODE

ou l'inverse. Il faut donc "convertir" l'une des collations en l'autre.

2voto

djoko soewarno Points 21

Ou vous pouvez utiliser une requête plus générique comme celle-ci :

select * from profile, userinfo
where profile.custid collate database_default = userinfo.custid collate database_default

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X