sql-server – SQL Server:需要TSQL或安全步骤:为表组更改整理排序规则

寻找安全的TSQL(首选)或安全步骤(如果可能的话,自动化),在一次投掷中更改几十个表的排序规则.

背景:

我们有一个db,SQL Server 2005,有大约100个表.

其中30-40个具有不适合我们正在运行的应用程序的排序规则集. (我们需要它们都是“SQL_Latin1_General_CP1_CS_AS”,但这组表是“SQL_Latin1_General_CP1_CI_AS”)

可能解决方案

我们找到了这个脚本:
http://www.codeproject.com/Articles/12753/SQL-Server-2000-Collation-Changer

找到解决方案的问题:

但是这个脚本似乎引入了数据丢失的可能性,并且似乎既不检测也不警告或测量是否会有数据丢失.

使用风险很大!

社区问题:

有更先进的方法解决这个问题吗?

最好是一个脚本:

>检测是否存在数据丢失并至少发出警告. (即使是只扫描表格的脚本,考虑从排序规则A到B的变化,并告诉我如果进行此更改将会发生什么……)
>可以批量工作(例如,我告诉它我的目标归类是什么,它完成了对数据库中所有表和列的所有工作,并报告它做了什么)

谢谢!

最佳答案
我最近不得不这样做,这是一个巨大的痛苦.我最后写了关于更改排序规则的文章:Collation: Correction -> Expression, Column, Database

在你的情况下我个人喜欢的方法可能是

>创建一个新数据库(如果需要,使用正确的排序规则)
>编写旧数据库的脚本
>对脚本文件执行搜索和替换以将排序规则从一个更改为另一个
>在新数据库上运行脚本
>移动数据
>重命名交换以将新数据库放在旧数据库的位置

您的其他选择是创建一个脚本,为每列生成更改或使用GUI. GUI会更慢但更确定.如果脚本不完美,脚本方法会产生您不想进行更改的风险.

脚本方法还有一个问题,即您必须删除任何触摸列的约束,索引等,然后才能更改它以更改排序规则.您可能能够生成一个脚本来为您执行此操作,但这并不容易.

如果您决定使用脚本方法,我可以帮助您生成一个来创建更改,但是为了删除和重新创建索引/约束,您将独立完成.就像我说的那样,我会重新创建数据库方法.除非您拥有大量数据,否则它很容易且相对较快.唯一真正的缺点是它要求数据库的大小可以是双倍甚至三倍(日志空间).

转载注明原文:sql-server – SQL Server:需要TSQL或安全步骤:为表组更改整理排序规则 - 代码日志