所以,我正在尝试做一些非常简单的事情;更改表并添加外键约束。问题是它给我一个错误,关于列的排序规则不匹配:
列blah与外键中的列blah引用的排序方式不同。
我不明白这一点,我到处都看。当我查看SQL属性页面时,它显示相同的排序规则(Latin1_General_CI_AS)。我到处寻找,我不知道如何改变这一点。任何可以帮助的人都将不胜感激。谢谢!
答案 0 :(得分:6)
尝试比较SQL Server中的两个字符串时,排序规则必须匹配,否则会出现此错误。排序规则告诉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)
答案 1 :(得分:1)
好像两个表或两个字段(外键 - 主键)具有不同的排序规则。你能给我们一些更多信息吗?
请参阅此帖子,了解如何检查排序规则:SQL Authority Blogpost