Sql-Server

錯誤:468 嘗試使用 SQL Server 管理工作室連接到 SQL Server

  • May 30, 2019

我正在嘗試使用 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 一樣工作,但使用實例的預設排序規則

引用自:https://dba.stackexchange.com/questions/239445