您可以想象创建一堆查询,这些查询将产生像“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([length]) 的列并生成更改语句以将排序规则更改为 Finnish_Swedish_CI_AI。
请注意,此示例仅作为概念证明。如果您想探索这种可能的解决方案,您必须花一些时间研究上述系统视图。
您可能必须单独查询来处理 nvarchar、nchar、ntext 和 varchar、char、文本字段。Nvarchar/Varchar(max) 字段可能需要特别考虑,以及任何潜在的字符类型计算列。