您可以設想創建一系列查詢,這些查詢將產生像「Alter table [schema]。[TableName] alter column [ColName] [type] collate [New Collation] [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)字段可能需要特殊考慮,以及任何可能的字符類型計算列。
[這個答案](http://stackoverflow.com/a/5002081/15498)包含一個鏈接到[更改所有列的排序而不刪除它們]的博客文章(http://sqlblogcasts.com/blogs/piotr_rodak /存檔/ 2007/12/14 /改變,比對的 - 全部列,不墜,它們。aspx) –
謝謝,但是通過「反覆試驗」來執行這樣的任務實際上不是一種選擇 - 數據庫只是大型的,而且這個策略將永遠佔據我的位置。 –
Hi @NicoBeemster你找到了解決方案嗎?我面臨同樣的問題 – mounaim