38

I´m trying to join two tables but I get this error:

Msg 468, Level 16, State 9, Line 8 Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

This is the code I´m using:

 SELECT *

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

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

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

I know it is wrong, it underlines COLLATE. I do not know how to apply it.

Alex Kudryashev
  • 9,120
  • 3
  • 27
  • 36
D.Roca
  • 487
  • 2
  • 5
  • 7

2 Answers2

70

Correct syntax looks like this. See 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 
Alex Kudryashev
  • 9,120
  • 3
  • 27
  • 36
  • With SQL Server the general "rule" appears to be `string_expression COLLATE collation_name` to treat the entity with a specific collation.. not sure how general it is, although it's reasonable enough for me to remember. – user2864740 Mar 25 '21 at 00:31
10

As a general rule, you can use Database_Default collation so you don't need to figure out which one to use. However, I strongly suggest reading Simons Liew's excellent article Understanding the COLLATE DATABASE_DEFAULT clause in SQL Server

SELECT *
  FROM [FAEB].[dbo].[ExportaComisiones] AS f
  JOIN [zCredifiel].[dbo].[optPerson] AS p
  ON (p.vTreasuryId = f.RFC) COLLATE Database_Default 
Julio Nobre
  • 4,196
  • 3
  • 46
  • 49