如何在SQL Server中使用COLLATE进行JOIN操作?

38

我试图连接两个表格,但是出现了以下错误:

Msg 468, Level 16, State 9, Line 8 在等于操作中无法解析"SQL_Latin1_General_CP1_CI_AS"和"Latin1_General_CI_AS"之间的排序冲突。

这是我正在使用的代码:

 SELECT *

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

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

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

我知道这是错的,它下划线了COLLATE。我不知道如何应用它。

2个回答

70

正确的语法应该是这样的。请参考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 

使用SQL Server时,一般的“规则”似乎是string_expression COLLATE collation_name来处理具有特定排序规则的实体。虽然我不确定它有多普遍,但足够合理,让我记住它。 - user2864740

10
作为一般准则,您可以使用 Database_Default 排序规则,因此无需弄清要使用哪个排序规则。但是,我强烈建议阅读Simons Liew的优秀文章《了解SQL Server中COLLATE DATABASE_DEFAULT子句》
SELECT *
  FROM [FAEB].[dbo].[ExportaComisiones] AS f
  JOIN [zCredifiel].[dbo].[optPerson] AS p
  ON (p.vTreasuryId = f.RFC) COLLATE Database_Default 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接