所以,我正在尝试做一些非常简单的事情;更改表并添加外键约束。问题是它给我一个错误,关于列的排序规则不匹配:
列 blah 与在外键 blah 中引用列 blah 的排序规则不同。
我不明白这一点,我到处找。当我查看 SQL 属性页面时,它显示了相同的排序规则 (Latin1_General_CI_AS)。我到处看了,我不知道如何改变它。任何可以提供帮助的人将不胜感激。谢谢!
所以,我正在尝试做一些非常简单的事情;更改表并添加外键约束。问题是它给我一个错误,关于列的排序规则不匹配:
列 blah 与在外键 blah 中引用列 blah 的排序规则不同。
我不明白这一点,我到处找。当我查看 SQL 属性页面时,它显示了相同的排序规则 (Latin1_General_CI_AS)。我到处看了,我不知道如何改变它。任何可以提供帮助的人将不胜感激。谢谢!
尝试在 SQL Server 中比较两个字符串时,排序规则必须匹配,否则会出现此错误。Collation 告诉 SQL Server 如何比较字符串(即 CHAR、NCHAR、VARCHAR、NVARCHAR)。排序规则 Latin1_General_CI_AS 使用 Latin1_General 字符集,不区分大小写,区分重音。
在我给你解决方案之前你需要知道一些事情: SQL Server 中有三个级别的排序规则:
为了解决您的问题,您需要更改您尝试比较的两个字段之一的排序规则,以使它们相同。更改两者以匹配数据库的排序规则可能是您的最佳实践:
ALTER TABLE MyMaster ALTER COLUMN MyMasterKey VARCHAR(30) COLLATE LATIN1_General_CI_AS
ALTER TABLE MyDetail ALTER COLUMN MyMasterKey VARCHAR(30) COLLATE LATIN1_General_CI_AS
然后你就可以定义外键了:
ALTER TABLE MyDetail ADD CONSTRAINT FK_Master_Detail FOREIGN KEY (MyMasterKey) REFERENCES MyMaster(MyMasterKey)
似乎这两个表或两个字段(外键 - 主键)具有不同的排序规则。你能给我们更多的信息吗?
请参阅这篇关于如何检查排序规则的帖子:SQL Authority Blogpost