代码之家  ›  专栏  ›  技术社区  ›  vikitor

排序规则冲突SQL Server 2008

  •  1
  • vikitor  · 技术社区  · 16 年前

    我一直在讨论这个问题,但我还没有找到解决问题的方法。我的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作为taxon,dbo.taxclass.claname作为taxon,是问题所在,但我不太明白为什么两个列都有相同的类型和所有内容。

    编辑:这是通过查询获得的结果,我如何绕过这个问题?

    Column Name Table Name  collation_name
    PhyName vDecisionsExpanded  Latin1_General_CI_AS
    ClaName vDecisionsExpanded  SQL_Latin1_General_CP1_CI_AS
    

    谢谢

    2 回复  |  直到 16 年前
        1
  •  3
  •   marc_s MisterSmith    16 年前

    在数据库中尝试此查询:

    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)如果选择中只有一列或几列,只需添加 COLLATE ..... 修改人:

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

    2)如果列太多,您可能需要考虑一起修改这些列/表或数据库中的排序规则。

        2
  •  0
  •   jl.    16 年前

    不同的服务器/数据库组合?冒着询问显而易见的风险,我假设您已经验证了您的列排序规则序列?