SQL Server 2005 排序规则问题

SQL Server 2005 排序规则问题

我有一个 SQL Server 2005 数据库,它是使用与我们的服务器不同的排序规则构建的。每当我尝试运行该网站时,都会收到此错误:

异常消息:无法解决等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突

有谁知道有什么方法可以修复错误而不用重建数据库?

答案1

如果问题是一个查询并且您没有选择重建该数据库,则可以使用 COLLATE 关键字,例如:

 SELECT *
 FROM OtherServer.xyz.dbo.Table2 t2
     inner join myTable t1 
         on t1.name = t2.name COLLATE SQL_Latin1_General_CP1_CI_AS

这里是COLLATE 的 MSDN 文档

答案2

用于COLLATE Database_Default强制连接或比较。

这样做的优点是比较中立,不会对排序规则进行硬编码,但缺点是如果您希望进行二进制或区分大小写的排序,则会出现意外结果。在这种情况下,我希望这样做没问题。

SELECT
  *
FROM
 dbo.ThisTable t2
 join
 dbo.ThatTable t1 on t1.name = t2.name COLLATE Database_Default
--or dbo.myTable t1 on t1.name COLLATE Database_Default = t2.name COLLATE Database_Default
--or dbo.myTable t1 on t1.name COLLATE Database_Default = t2.name

答案3

解决此问题的推荐方法是重建数据库或重新安装 SQL 实例,但我想这不是您想要的。

有一个应用程序这里声称可以为您做到这一点,它被称为 SQL 2000 联盟转换器,但声称也可以与 SQL 2005 一起使用。我没有用过它,所以我不能给你使用它的经验,但它是一个选项。与往常一样,请确保先完全备份

相关内容