我有一个 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
答案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 一起使用。我没有用过它,所以我不能给你使用它的经验,但它是一个选项。与往常一样,请确保先完全备份