2012-03-22 33 views
1

我有一個問題,我試圖在互聯網上找到更多信息,但我仍然不確定。設置和更改SQL Server整理

如果我有一個帶有以下默認排序規則示例「Modern_Spanish_CI_AS」的SQL Server實例,並且我還有一個具有不同排序規則示例「Latin1_General_CI_AS」的已恢復數據庫。

SQL Server將使用什麼排序規則?默認情況下是Modern_Spanish ...或者它將使用數據庫Latin1_General?

在以下鏈接解釋了一些事情 Setting and Changing the Server Collation

謝謝!

回答

2

它將使用Latin1_General_CI_AS排序規則,因爲這是數據庫本身的設置。

爲了說明起見,數據庫中設置的值將覆蓋服務器的「默認」排序規則。默認排序規則基本上只在創建全新數據庫時使用。

在服務器級別更改默認排序規則對現有數據庫沒有影響,您將不得不逐個更改每個排序規則,但這本身可能會導致您與所創建的任何其他數據庫級別的對象發生級聯問題,例如作爲存儲過程,約束,甚至是您從第三方應用程序對數據庫執行的任何動態SQL。

+0

您在(var)char列上創建的任何索引以及這些索引的統計信息也將受到影響。 – 2012-03-22 08:38:28

2

SQL Server排序規則可以設置在各種級別:服務器,數據庫,列,會計。如果不在較低級別設置歸類,則從上一級繼承。例如。創建數據庫時,除非您明確設置數據庫的歸類,否則數據庫歸類將成爲服務器的歸類。

許多排序規則可以很好地協同工作。有時可能會有困難,通常排序順序的性質是意想不到的。我不確定,但我希望你指定的2是兼容的。

所以是的,你的數據庫(幾乎可以肯定)會用Latin1_General_CI_AS排序規則恢復,幾乎肯定會很好。 Google應該能夠幫助您找到兼容的排序規則列表。

+2

如果還原的數據庫正在使用臨時表,則一切都將不正常。臨時表默認爲tempdb的排序規則,與服務器默認值相同。一種可能導致災難的情況是,如果數據庫創建臨時表並對其執行對歸類敏感的操作(例如對其自己的表之一的聯接)。 – 2012-03-22 08:42:04