排序规则冲突SQL Server 2008

时间:2010-04-28 15:40:45

标签: sql-server

我一直在解决这个问题,但我找不到解决问题的方法。我的SQL查询是:

SELECT 
   dbo.Country.CtyRecID, dbo.Country.CtyShort, dbo.Notification.NotRecID,
   dbo.Notification.NotName, dbo.TemporalSuspension.TCtsCode, 
   dbo.TemporalSuspension.TCtsCodeRecID,
   dbo.TaxPhylum.PhyName AS Taxon, dbo.TemporalSuspension.TCtsNotes, 
   dbo.TemporalSuspension.TCtsRecID,
   dbo.TemporalSuspension.TCtsKgmRecID, 
   CASE dbo.TemporalSuspension.TCtsKgmRecID WHEN 1 THEN 'Animals'
         WHEN 2 THEN 'Plants' ELSE 'All' END AS Kingdom
FROM  
   dbo.TemporalSuspension 
INNER JOIN dbo.Notification 
   ON dbo.TemporalSuspension.TCtsStartNotRecID = dbo.Notification.NotRecID 
INNER JOIN dbo.Country 
   ON dbo.TemporalSuspension.TCtsCtyRecID = dbo.Country.CtyRecID 
INNER JOIN dbo.TaxPhylum 
   ON dbo.TemporalSuspension.TCtsCodeRecID = dbo.TaxPhylum.PhyRecID 
      AND dbo.TemporalSuspension.TCtsCode LIKE 'PHY'

UNION ALL

SELECT 
    dbo.Country.CtyRecID, dbo.Country.CtyShort, dbo.Notification.NotRecID, 
    dbo.Notification.NotName, dbo.TemporalSuspension.TCtsCode, 
    dbo.TemporalSuspension.TCtsCodeRecID, 
    dbo.TaxClass.ClaName AS Taxon, dbo.TemporalSuspension.TCtsNotes, 
    dbo.TemporalSuspension.TCtsRecID, 
    dbo.TemporalSuspension.TCtsKgmRecID, 
    CASE dbo.TemporalSuspension.TCtsKgmRecID WHEN 1 THEN 'Animals' 
        WHEN 2 THEN 'Plants' ELSE 'All' END AS Kingdom
FROM  
   dbo.TemporalSuspension 
INNER JOIN dbo.Notification 
   ON dbo.TemporalSuspension.TCtsStartNotRecID = dbo.Notification.NotRecID 
INNER JOIN dbo.Country 
   ON dbo.TemporalSuspension.TCtsCtyRecID = dbo.Country.CtyRecID 
INNER JOIN dbo.TaxClass 
   ON dbo.TemporalSuspension.TCtsCodeRecID = dbo.TaxClass.ClaRecID 
      AND dbo.TemporalSuspension.TCtsCode LIKE 'CLA'

但我不明白为什么它不起作用,我一直收到这个错误:

  

无法解决SELECT语句中第7列的排序规则冲突。

怎么了?我曾经使用过这个时间,我从来没有遇到过这个问题。根据错误,dbo.TaxPhylum.PhyName AS Taxon和dbo.TaxClass.ClaName AS Taxon是给出问题的东西,但我真的不明白为什么,两个列都有相同的类型和所有内容。

编辑:这是查询获得的结果,我该如何解决这个问题?

Column Name Table Name  collation_name
PhyName vDecisionsExpanded  Latin1_General_CI_AS
ClaName vDecisionsExpanded  SQL_Latin1_General_CP1_CI_AS

感谢

2 个答案:

答案 0 :(得分:3)

在您的数据库中尝试此查询:

SELECT 
    col.name 'Column Name',
    OBJECT_NAME(object_id) 'Table Name',
    col.collation_name 
FROM sys.columns col
WHERE col.system_type_id IN (35, 99, 167, 175, 231, 239) -- TEXT, NTEXT, VARCHAR etc.

它将显示数据库中所有与字符串相关的列及其排序规则。

错误消息说第7列是罪魁祸首 - 那将是dbo.TaxPhylum.PhyName - 因此也要检查TaxPhylum数据库。该数据库中的排序规则是否与普通数据库不同?

<强>更新 如果您有排序规则冲突,可以做两件事:

1)如果SELECT中只有一列或几列,只需将COLLATE .....修饰符添加到它们中:

SELECT 
   .....
   dbo.TaxPhylum.PhyName COLLATE SQL_Latin1_General_CP1_CI_AS AS Taxon, 
   .....

2)如果它是很多列,你可能想要考虑修改那些列/表或那个数据库中的COLLATION

答案 1 :(得分:0)

不同的服务器/数据库组合?冒着明显的问题,我假设你已经验证了你的列校对序列?