【问题标题】:How to use the COLLATE in a JOIN in SQL Server?如何在 SQL Server 的 JOIN 中使用 COLLATE?
【发布时间】:2023-04-08 00:44:01
【问题描述】:

我正在尝试加入两个表,但出现此错误:

消息 468,级别 16,状态 9,第 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 下划线。我不知道如何应用它。

【问题讨论】:

    标签: sql-server join collate


    【解决方案1】:

    正确的语法如下所示。见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 来处理具有特定排序规则的实体.. 不确定它有多一般,尽管它对我来说已经足够合理了。跨度>
    【解决方案2】:

    作为一般规则,您可以使用 Database_Default 排序规则,因此您无需弄清楚要使用哪个排序规则。不过,我强烈建议阅读 Simons Liew 的优秀文章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 
    

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 2018-07-17
      • 2013-05-05
      • 2010-11-20
      相关资源
      最近更新 更多