1

问题:有没有一种有效的方法可以在 SQL Server 中切换 1 个数据库的排序规则?

我已经通过属性 -> 选项 -> 排序规则设置了数据库的排序规则。尽管此排序规则是为新字段设置的,但数据库中现有的基于文本的字段均未更改。这是我需要完成的。

我需要在其上切换排序规则的数据库很大(50+GB,750+ 个表),因此手动更改数据库中的所有字段不是一种选择。

以下情况如何:

  • 为数据库结构创建脚本
  • 导出所有数据
  • 删除数据库
  • 使用正确的排序规则创建一个空数据库
  • 创建数据库结构 - 所有基于文本的字段现在都应设置为数据库默认值
  • 导入数据
  • 巴达兵,巴达繁荣?

其他策略?

我可以查询主数据库并在那里更改排序规则吗?

感谢您的输入!

4

2 回答 2

1

我之前遇到过这个问题,我发现的唯一方法是保存-删除-加载并填充该数据库。

另外,我猜你已经浏览过这个页面了。

于 2012-06-08T07:49:59.113 回答
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([length]) 的列并生成更改语句以将排序规则更改为 Finnish_Swedish_CI_AI。

请注意,此示例仅作为概念证明。如果您想探索这种可能的解决方案,您必须花一些时间研究上述系统视图。

您可能必须单独查询来处理 nvarchar、nchar、ntext 和 varchar、char、文本字段。Nvarchar/Varchar(max) 字段可能需要特别考虑,以及任何潜在的字符类型计算列。

于 2012-06-08T08:14:50.630 回答