2012-06-08 41 views
1

問題:是否有切換SQL Server中1個數據庫排序規則的有效方法?SQL Server - 在1個數據庫上更改數據庫排序規則的最佳策略(不會更改服務器默認值)

我已經通過屬性 - >選項 - >排序規則來設置數據庫的排序規則。儘管此排序規則是爲新字段設置的,但數據庫中現有的基於文本的字段均未更改。這是我需要完成的。

我需要切換排序規則的數據庫非常龐大(50 + GB,750多個表),因此不能手動更改數據庫中的所有字段。

什麼如下:

  • 數據庫
  • 出口結構創建腳本的所有數據
  • 刪除數據庫
  • 用正確的歸類創建一個空數據庫
  • 創建數據庫結構 - 現在應將所有基於文本的字段設置爲 至數據庫默認值
  • 進口數據
  • Bada bing,bada繁榮?

其他策略?

我可以查詢master數據庫並在那裏更改排序規則嗎?

感謝您的輸入!

+1

[這個答案](http://stackoverflow.com/a/5002081/15498)包含一個鏈接到[更改所有列的排序而不刪除它們]的博客文章(http://sqlblogcasts.com/blogs/piotr_rodak /存檔/ 2007/12/14 /改變,比對的 - 全部列,不墜,它們。aspx) –

+0

謝謝,但是通過「反覆試驗」來執行這樣的任務實際上不是一種選擇 - 數據庫只是大型的,而且這個策略將永遠佔據我的位置。 –

+0

Hi @NicoBeemster你找到了解決方案嗎?我面臨同樣的問題 – mounaim

回答

1

我之前遇到過這個問題,我發現的唯一方法是保存 - 下載並填充該數據庫。

此外,我想你已經瀏覽了這個page

+0

是的,我已經瀏覽過那個頁面。 我會嘗試這種出口/進口戰略,因爲這似乎是最優雅,高效的解決方案。謝謝! –

0

您可以設想創建一系列查詢,這些查詢將產生像「Alter table [schema]。[TableName] alter column [ColName] [type] collat​​e [New Collat​​ion] [nullability]」這樣的行作爲輸出。這可以使用內置的sys.Schemas,sys.Tables和sys.Columns系統視圖來完成。

樣品:

select 'alter table [' + s.name + '].[' + t.name + '] alter column [' + c.name 
    + '] nvarchar(' + CAST(c.max_length/2 as nvarchar) +') ' 
    + ' collate Finnish_Swedish_CI_AI ' 
    + (case when c.is_nullable = 1 then ' null ' else ' not null ' end) 
from sys.tables t 
    join sys.schemas s on t.schema_id = s.schema_id 
    join sys.columns c on t.object_id = c.object_id 
where t.type='U' and c.system_type_id = 231 

樣品會發現類型爲nvarchar([長度])的列,併產生改變語句來覈對變爲Finnish_Swedish_CI_AI。

請注意,此示例僅作爲概念驗證。如果你想探索這個可能的解決方案,你必須花一些時間研究所提到的系統視圖。

您可能需要爲處理nvarchar,nchar,ntext和varchar,char,text字段進行單獨的查詢。 Nvarchar/Varchar(max)字段可能需要特殊考慮,以及任何可能的字符類型計算列。

+1

Doh。當我在輸入我的答案時,Damien發佈了一條評論,並附有鏈接到一個頁面的鏈接,其中解釋了相同的策略。現在我不知道我是否應該刪除我的答案或不... – user1429080

+0

這是一個起點。我正在檢查此頁面上的腳本:http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx,以努力編寫我自己的全自動腳本。 – Zarepheth

相關問題