我們在嘗試將所有用戶更新爲SQL Server中的小寫用戶名時出現問題。我們正在這樣做,以支持我們的應用程序的最近更改。具體地,下面的查詢與FK約束錯誤失敗上的另一表的引用[用戶]。[用戶名]外鍵SQL Server大小寫敏感性
Update [User]
Set [Username] = 'someuser' where [username] = 'SomeUser'
用戶「SomeUser是否」並不在外部表已經存在與殼體匹配「SomeUser是否」。此時FK未設置爲「更新級聯」。我打算走這條路,但有不少參考文獻[User]。[用戶名]專欄,當我開始沿着這條路走時,有點混亂。另外,我寧願處理根本原因 - 爲什麼SQL在Key上強制匹配?
我不是最好的SQL Server的內部,但我已經cheched使用另一個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中的位置,或者運行查詢來獲取它們),或者如果我沒有給出足夠的詳細信息,請提供任何其他詳細信息信息。
UPDATE:錯誤的請求
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.
是什麼*確切*錯誤請? – gbn 2010-11-08 20:13:19
我更新了錯誤的主要帖子。據我所知,這只是一個基本的FK約束錯誤。 – WesleyJohnson 2010-11-08 20:23:47