【问题标题】:Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AI" in the equal to operation无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AI”之间的排序规则冲突
【发布时间】:2012-02-22 10:38:40
【问题描述】:

自从我从台式机转移到笔记本电脑后,我遇到了上述排序错误。我的数据库有数百个存储过程,所以像覆盖某些查询或修复列排序规则这样的解决方案对我来说是不可能的。

“无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AI”之间的排序规则冲突”

我的问题不是唯一的,我已经搜索了很多,但可用的解决方案建议我用一些不可行的代码覆盖查询。请提出一些可以避免这种排序规则的解决方案。

我已经尝试这样做来更改我的数据库排序规则。

ALTER DATABASE testDB  
COLLATE French_CI_AI ;  
GO  

谢谢。

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    在连接具有不同排序规则的表时,只需使用以下语法即时排序。我集成系统,所以我必须经常这样做。

    select * from [Product] p join [category] c 
    on  
    c.[Name] collate SQL_Latin1_General_CP1_CI_AS 
    = 
    p.[Name] collate SQL_Latin1_General_CP1_CI_AS
    

    【讨论】:

    • 对于任何可以即时完成的人
    • 感谢 Master Styles 的回复,但这对我没有帮助,因为我的问题分布在大约 600 多个存储过程和 100 多个表中。
    • @MasterStyles 我想更改整个数据库排序规则。有可能吗?
    • @coderwill 有可能,但非常危险。例如,从不区分大小写切换到区分大小写(反之亦然)将影响所有涉及文本数据的查询中的 = 和 操作。
    【解决方案2】:
    USE master;
    GO
    ALTER DATABASE PRATAP
    COLLATE Latin1_General_CI_AS_KS_WS ;
    GO
    
    --Verify the collation setting.
    SELECT name, collation_name
    FROM sys.databases
    WHERE name = N' PRATAP ';
    GO
    

    【讨论】:

      【解决方案3】:

      这是因为服务器排序规则设置。我们需要更改服务器排序规则设置。

      .\Setup.exe /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=DESKTOP-QUAN3NS\admin /SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS--你想要的排序规则

      一旦你可以运行这个命令 C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019 使用 Powershell。

      【讨论】:

        【解决方案4】:

        只需在您的联接中添加此行 -> SQL_Latin1_General_CP1_CI_AS。就是这样 :) https://premkt.blogspot.my/2016/12/error-cannot-resolve-collation-conflict.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-20
          • 2010-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多