SQL Server排序规则冲突

时间:2009-02-13 16:18:44

标签: sql-server redgate sqlcompare

将数据从一个SQL服务器传输到另一个SQL服务器,但是当比较Schema并同步时,会收到以下错误。我们使用redgate SQL compare来完成。

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

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

5 个答案:

答案 0 :(得分:6)

SQL Compare有一个忽略归类的选项。查看比较项目配置中的“选项”选项卡。

答案 1 :(得分:0)

听起来服务器的整理设置不同。

如何传输数据,是否在新平台上执行数据库还原?

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

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

答案 2 :(得分:0)

您对SQL Compare utlity有疑问,还是担心不同的服务器排序会导致问题?

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

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

我担心没有SQL Compare“魔术子弹”来解决这个问题。