问题:有没有一种有效的方法来切换SQL Server中1个数据库的整理?
我通过属性设置了数据库的排序规则 - >选项 - >排序规则。尽管为新字段设置了此排序规则,但数据库中现有的基于文本的字段均未更改。这就是我需要完成的工作。
我需要切换排序规则的数据库很大(50 + GB,750 +表),因此无法手动更改数据库中的所有字段。
以下内容如何:
其他策略?
我可以查询master数据库并更改那里的排序规则吗?
感谢您的投入!
答案 0 :(得分:1)
之前我遇到过这个问题,我找到的唯一方法就是save-drop-load并填充该数据库。
另外,我猜你已经浏览了这个page。
答案 1 :(得分:0)
你可以设想创建一堆查询,这些查询会生成像“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])类型的列,并生成alter语句以将排序规则更改为Finnish_Swedish_CI_AI。
请注意,此示例仅用作概念证明。如果您想探索这种可能的解决方案,您必须花一些时间研究上述系统视图。
您可能必须单独查询以处理nvarchar,nchar,ntext和varchar,char,文本字段。 Nvarchar / Varchar(max)字段可能需要特别考虑,以及任何可能的字符类型计算列。