外键中的SQL Server案例敏感性

时间:2010-11-08 20:03:02

标签: sql sql-server sql-server-2005

我们在尝试将所有用户更新为SQL Server中的小写用户名时遇到问题。我们这样做是为了支持我们的应用程序中的最新更改。具体而言,以下查询在另一个引用[用户]的表上失败并出现FK约束错误。[用户名]

Update [User]
Set [Username] = 'someuser' where [username] = 'SomeUser'

用户'someuser'确实存在于外表中,且外壳与'SomeUser'匹配。目前FK未设置为Cascade on Update。我打算走那条路,但是有很多参考[用户]。[用户名]专栏,当我开始走这条路时,它有点乱。此外,我宁愿解决根本原因 - 为什么SQL在Key上强制执行大小写匹配?

我不是最好的SQL Server内部,但我已经使用另一个SO问题的指导来填充COLLATION(http://stackoverflow.com/questions/1411161/sql-server-check-case-灵敏度)我得到了这些结果。

SELECT SERVERPROPERTY('COLLATION')
=> SQL_Latin1_General_CP1_CI_AS

SELECT DATABASEPROPERTYEX('MyDB', 'Collation') SQLCollation; 
=> SQL_Latin1_General_CP1_CI_AS

select table_name, column_name, collation_name 
from information_schema.columns 
where table_name = 'User' 
=> User Username    SQL_Latin1_General_CP1_CI_AS

select table_name, column_name, collation_name 
from information_schema.columns 
where table_name = 'ForeignTable' 
=> ForeignTable User_Username   SQL_Latin1_General_CP1_CI_AS

我不知道要检查什么。希望有人有解决方案。我很高兴检查SQL中的任何设置(尽管您可能需要引导我到Management Studio中的位置或运行以获取它们的查询)或者如果我没有给出足够的信息,请提供任何其他详细信息资讯

更新:请求错误

Msg 547, Level 16, State 0, Line 4
The UPDATE statement conflicted with the REFERENCE constraint "FK_ForeignTable_User". The conflict occurred in database "MyDB", table "dbo.ForeignTable", column 'User_Username'.
The statement has been terminated.

1 个答案:

答案 0 :(得分:2)

基于所有排序对齐的事实,一个原因可能是触发更新时触发。这就是确切的错误消息很重要的原因。

例如,您是否有审计触发器尝试将更新记录到区分大小写的列中?

这么说,我从未试图在两种不同的排序规则之间创建一个FK(我现在无法测试):不确定它是否会起作用。

测试SomeUser与某些用户的一种实际方法是一个简单的GROUP BY:你得到每个值一个计数或两个值都计算一个

编辑:检查尾随空格......

相关问题