【问题标题】:SQL Server Collation ConflictSQL Server 排序规则冲突
【发布时间】:2010-10-07 11:44:54
【问题描述】:

将数据从一台 SQL 服务器传输到另一台,但在比较和同步架构时收到以下错误。我们正在使用 redgate SQL 比较来完成。

无法解决等于操作的排序规则冲突

基础 SQL 服务器是 SQL_Latin1_General_CP1_CI_AS,目标服务器是 Latin1_General_CI_AS

【问题讨论】:

    标签: sql-server redgate sqlcompare


    【解决方案1】:

    SQL 比较具有忽略排序规则的选项。在比较项目配置中的“选项”选项卡下查看。

    【讨论】:

    • 但这只是“忽略”排序规则作为比较的东西。不会生成“忽略”同步排序规则的代码。
    【解决方案2】:

    您是否对 SQL 比较实用程序有问题,或者担心不同的服务器排序规则会导致问题?

    您可以更改目标服务器的排序规则以匹配基本服务器

    如果这是不可能的,那么让每个服务器上的数据库的排序规则匹配,然后你唯一真正的问题可能是你创建的任何临时表(它们将有一个与服务器/TEMPDB 匹配的默认排序规则) ,并且只要您显式创建临时表(即不要使用 SELECT * INTO #TEMP FROM MyTable 创建它)并将排序规则显式分配给任何 varchar/text 列,您应该没问题

    【讨论】:

      【解决方案3】:

      我克服这个问题的方法是通过 SQL Compare 生成脚本,然后删除(或替换)Collat​​ion 特定代码。这是比较快速和容易做到的,最后我手动将脚本应用到目标服务器/数据库。

      【讨论】:

        【解决方案4】:

        听起来服务器的排序规则设置不同。

        您是如何传输数据的,您是否在新平台上执行数据库恢复?

        无论哪种方式,您都需要确保新环境中使用的排序规则与源环境中当前使用的排序规则相同。

        希望这是有道理的,如果您需要进一步的帮助,请告诉我。

        【讨论】:

          【解决方案5】:

          由于上述原因,“忽略排序规则”绝对行不通。迁移对象(如视图和存储过程)时会出现问题,这些对象在具有不同排序规则的文本字段上使用 JOIN 子句。

          如果有人更改了服务器上的默认排序规则,而 JOIN 另一侧的列使用了特定排序规则,则您已导致此问题。它会发生在 SQL 比较中,以及如果您只是在 SSMS 中手动编写对象并自己移动它。

          有两种方法可以修复它 - 您可以在连接上指定 COLLATE 子句并明确说明要使用的排序规则,或者您可以更改目标数据库默认排序规则以匹配源。

          恐怕没有SQL Compare“灵丹妙药”可以解决这个问题。

          【讨论】:

            猜你喜欢
            • 2012-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-13
            • 2011-04-17
            • 1970-01-01
            相关资源
            最近更新 更多