SQL Server排序规则冲突

4

将数据从一个SQL服务器转移到另一个时,但在比较和同步模式时出现以下错误。我们使用Redgate SQL Compare完成。

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

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

5个回答

6

SQL Compare有一个忽略字符集的选项。在比较项目配置中找到"选项"标签页。


但这只是将排序规则“忽略”为比较对象。它不会生成代码以在同步时“忽略”排序规则。 - Kev Riley

0
“忽略排序规则”绝对行不通,原因如上所述。当迁移使用文本字段的JOIN子句的视图和存储过程时,出现问题的原因是这些文本字段具有不同的排序规则。
如果有人更改了服务器上的默认排序规则,并且JOIN另一侧的列使用特定的排序规则,则会导致此问题。这将在SQL Compare中发生,以及如果您只是在SSMS中手动脚本化对象并将其移动。
解决它有两种方法-您可以在JOIN上指定COLLATE子句并明确指定要使用的排序规则,或者您可以更改目标数据库的默认排序规则以匹配源。
恐怕没有SQL Compare的“魔法子弹”来解决这个问题。

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

0

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

你是如何传输数据的?在新平台上执行数据库还原吗?

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

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


0

你的问题是关于SQL Compare工具,还是担心不同的服务器排序规则会导致问题?

你可以将目标服务器的排序规则更改为与基础服务器匹配。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接