web-dev-qa-db-fra.com

Comment utiliser le COLLATE dans une jointure dans SQL Server?

J'essaie de joindre deux tables mais j'obtiens cette erreur:

Msg 468, niveau 16, état 9, ligne 8 Impossible de résoudre le conflit de classement entre "SQL_Latin1_General_CP1_CI_AS" et "Latin1_General_CI_AS" identiques à l'opération.

C'est le code que j'utilise:

 SELECT *

  FROM [FAEB].[dbo].[ExportaComisiones] AS f

  JOIN [zCredifiel].[dbo].[optPerson] AS p

  ON (p.vTreasuryId = f.RFC) COLLATE Latin1_General_CI_AS 

Je sais que c'est faux, cela souligne COLLATE . Je ne sais pas comment l'appliquer.

16
D.Roca

La syntaxe correcte ressemble à ceci. Voir MSDN .

SELECT *
  FROM [FAEB].[dbo].[ExportaComisiones] AS f
  JOIN [zCredifiel].[dbo].[optPerson] AS p

  ON p.vTreasuryId COLLATE Latin1_General_CI_AS = f.RFC COLLATE Latin1_General_CI_AS 
33
Alex Kudryashev

En règle générale, vous pouvez utiliser un classement Database_Default afin que vous n'ayez pas à déterminer lequel utiliser. Cependant, je suggère fortement de lire l'excellent article de Simons Liew Comprendre la clause COLLATE DATABASE_DEFAULT dans SQL Server

SELECT *
  FROM [FAEB].[dbo].[ExportaComisiones] AS f
  JOIN [zCredifiel].[dbo].[optPerson] AS p
  ON (p.vTreasuryId = f.RFC) COLLATE Database_Default 
5
Julio Nobre