SQL Server 2000 校对更改器






4.88/5 (92投票s)
更改数据库中所有文本列的排序规则顺序。
引言
您是否有一个需要部署到其他国家的 SQL 应用程序?您是否需要更改 SQL 数据库及其所有对象的排序规则?如果答案是肯定的,那么手动完成这项工作可能会非常耗时。如果您运行下面的 alter database 脚本:
ALTER DATABASE [My_Database] COLLATE My_Collation
您会发现数据库默认排序规则已为新列更改,但所有现有列将保留原始排序规则。更改每个列的排序规则是一项棘手的任务,因为您需要删除与该列关联的所有索引、全文索引和约束,以及任何用户定义函数。一旦排序规则更改完毕,您就可以重新创建索引、约束和函数。这个 C# 工具通过创建一个 SQL 脚本来完成所有这些工作,从而简化了这一过程。
Using the Code
只需运行程序,选择您的 SQL Server 数据库和新的排序规则。您有两个选项:您可以让程序创建一个 SQL 脚本供您稍后运行(按“仅脚本”按钮),或者您可以实际进行更改(按“脚本和执行”按钮)。需要注意的事项:
- 在运行此工具之前,请务必备份您的数据库。我不能保证您不会丢失数据。一些语句无法在事务中运行,因此无法检测到故障并回滚。
- 在 SQL Server 2000 上,
nText
列将被重新创建,因此您的列顺序将略有不同。 - 要运行脚本,程序会将数据库设置为单用户模式以运行
ALTER DATABASE [db_name] COLLATE [Collation Name]
语句。因此,您应该确保在运行脚本之前数据库没有任何打开的连接(使用存储过程SP_WHO
来识别任何打开的连接)。 - 由于脚本将删除然后重新构建数据库中的所有索引和外键,您会发现完成此过程可能需要很长时间(可能几个小时)。
- 即使在运行脚本之前列具有非默认排序规则,所有列也将被更改为新的排序规则。
- SQL 2005 支持正在逐步添加中。如果您遇到问题或缺少功能,请告知我。
- 如果您从不区分大小写更改为区分大小写的排序规则,您可能会在重新创建检查约束和函数时遇到错误。这是因为更改排序规则后,您的脚本将被以区分大小写的方式解析。要解决此问题,我建议您运行程序中的脚本,并在脚本运行完成后查看输出。与每个失败相关的错误消息将显示在失败代码下方的红色字体中。
变更历史
2006 年 1 月 18 日
- 原始发布。
2006 年 3 月 7 日
- 修复了脚本在具有区分大小写排序规则的数据库上失败的错误。现在,除非必要,脚本不会删除外键约束。
2006 年 8 月 30 日
- 修复了在使用由不同于执行脚本的所有者拥有的对象时出现的脚本错误。这可能会在脚本化到
#spindtab_____
时显示为错误。 - 修复了脚本在重新创建表函数后未重新创建表函数权限的错误。
2007 年 3 月 20 日
- 在进行更改时,触发器现在被禁用。
- 更改了执行顺序,以防止在用户反馈后出现错误。
- 添加了部分 SQL 2005 支持。如果您遇到任何问题,请告诉我。
- 解决了重新创建表函数时,表函数正文大于 4000 个字符的问题。
- 恢复了仅删除必需索引和主键的功能。
2007 年 10 月 10 日
- 增加了对更改具有全文索引的排序规则的支持,包括更改全文搜索中使用的语言。
- 修复了在视图上存在
insteadof
触发器时出现的问题。 - 修复了
nText
列最终允许为空,而它们最初被声明为NOT NULL
的问题。 - SQL 2005 允许修改
nText
列的排序规则。脚本已修改以反映此新功能。 - 修复了使用用户定义数据类型时遇到的问题。
- 增加了额外的 SQL 2005 支持,包括重构脚本逻辑,以允许为不同版本的 SQL Server 定制脚本的各个部分。如果您需要调试或定制脚本,应该会更容易理解。
- 从 VB.NET 转换为 C#,因为我工作中一直使用 C#,对我来说更熟悉。
- 将执行任务移至工作线程,以提供更具响应性的 UI。
- 修复了系统数据库具有区分大小写排序顺序时出现的问题。
2008 年 3 月 1 日
- 为处理 SQL 2005 中的索引、统计信息和关系创建了新代码。此新代码使用了 2005 年的架构视图,并为新的 SQL 2005 功能(例如非聚集索引中的包含列)添加了脚本支持。
- 修复了重新创建表函数后
ANSI_NULLS
设置不正确的问 - 修复了各种小的 UI 错误。