錯誤:468 嘗試使用 SQL Server 管理工作室連接到 SQL Server
我正在嘗試使用 SQL Server management studio 2014 連接到 SQL Server 12。
連接成功,但是當我嘗試使用滑鼠右鍵查看特定數據庫的屬性時,出現此錯誤:
無法解決等於操作的“SQL_Latin1_General_CP1_CS_AS”和“Modern_Spanish_CI_AS”之間的排序規則衝突。由於連結錯誤,無法使用視圖或函式“dbo.sysdac_instances”。(Microsoft SQL Server,錯誤:468)
這似乎是與整理有關的問題。我如何為連接指定正確的排序規則?
我如何為連接指定正確的排序規則?
你不能。即使可以,這也無濟於事,因為問題是兩個不同的字元串列之間的衝突。這個問題的唯一特定於 SSMS 的方面是 SSMS 從特定的系統視圖中進行選擇
msdb.dbo.sysdac_instances
——即連接這兩個字元串列,期望它們始終使用相同的排序規則(並且在大多數情況下確實如此) .請參閱我對這個相關/重複問題的回答:
排序規則衝突……無法使用 dbo.sysdac_instances
在那裡我解釋了為什麼會發生這種情況以及您的選擇是什麼。這應該是由與排序規則不同的實例級排序規則引起的
msdb
。當恢復/附加msdb
在具有不同實例級排序規則的另一個實例中創建時,可能會發生這種情況。影響最小的選項是更新
dbo.sysdac_instances
系統視圖的定義。不理想,但考慮到其他選項,如果它被證明是一個問題,它也是最容易逆轉的,儘管我不明白它怎麼可能是一個問題。在該範例中,我用於Latin1_General_CI_AS
修復,因為它是實例級排序規則。在這種情況下,我會使用SQL_Latin1_General_CP1_CS_AS
,因為我猜它是您的實例級預設排序規則。如果您正在考慮更新實例和數據庫的排序規則,請參閱我的以下文章:
更改所有使用者數據庫中的實例、數據庫和所有列的排序規則:可能出了什麼問題?
此外,這也是為什麼我們需要有一個類似於
DATABASE_DEFAULT
但在實例級別工作的特殊排序規則的另一個例子INSTANCE_DEFAULT
——這樣就可以有一個通用的解決方案來解決這類問題。這將允許msdb.dbo.sysdac_instances_internal
使用以下方法創建表:... [instance_name] sysname COLLATE INSTANCE_DEFAULT, ...
或者,視圖最後可能是這樣的
msdb.dbo.sysdac_instances
:LEFT JOIN sys.databases sd ON dac_instances.instance_name = sd.name COLLATE INSTANCE_DEFAULT
所以請投票支持以下建議:
添加特殊排序規則 INSTANCE_DEFAULT 以像 COLLATE DATABASE_DEFAULT 一樣工作,但使用實例的預設排序規則