SQL Server - 在1个数据库上更改数据库排序规则的最佳策略(不会更改服务器默认值)

问题描述:

问题:是否有切换SQL Server中1个数据库排序规则的有效方法?SQL Server - 在1个数据库上更改数据库排序规则的最佳策略(不会更改服务器默认值)

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

我需要切换排序规则的数据库非常庞大(50 + GB,750多个表),因此不能手动更改数据库中的所有字段。

什么如下:

  • 数据库
  • 出口结构创建脚本的所有数据
  • 删除数据库
  • 用正确的归类创建一个空数据库
  • 创建数据库结构 - 现在应将所有基于文本的字段设置为 至数据库默认值
  • 进口数据
  • Bada bing,bada繁荣?

其他策略?

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

感谢您的输入!

+1

[这个答案](http://*.com/a/5002081/15498)包含一个链接到[更改所有列的排序而不删除它们]的博客文章(http://sqlblogcasts.com/blogs/piotr_rodak /存档/ 2007/12/14 /改变,比对的 - 全部列,不坠,它们。aspx) –

+0

谢谢,但是通过“反复试验”来执行这样的任务实际上不是一种选择 - 数据库只是大型的,而且这个策略将永远占据我的位置。 –

+0

Hi @NicoBeemster你找到了解决方案吗?我面临同样的问题 – mounaim

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

此外,我想你已经浏览了这个page

+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([长度])的列,并产生改变语句来核对变为Finnish_Swedish_CI_AI。

请注意,此示例仅作为概念验证。如果你想探索这个可能的解决方案,你必须花一些时间研究所提到的系统视图。

您可能需要为处理nvarchar,nchar,ntext和varchar,char,text字段进行单独的查询。 Nvarchar/Varchar(max)字段可能需要特殊考虑,以及任何可能的字符类型计算列。

+1

Doh。当我在输入我的答案时,Damien发布了一条评论,并附有链接到一个页面的链接,其中解释了相同的策略。现在我不知道我是否应该删除我的答案或不... – user1429080

+0

这是一个起点。我正在检查此页面上的脚本:http://www.sqlservercentral.com/Forums/Topic820675-146-1.aspx,以努力编写我自己的全自动脚本。 – Zarepheth