您可以设想创建一系列查询,这些查询将产生像“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)字段可能需要特殊考虑,以及任何可能的字符类型计算列。