在全球化的今天,企业经常需要将应用程序部署到不同的国家。在这种情况下,可能需要更改SQL数据库的字符集以及数据库中所有对象的字符集。手动更改字符集是一个缓慢且复杂的任务。如果运行了如下的ALTER DATABASE脚本:
ALTER DATABASE [My_Database] COLLATE My_Collation
会发现数据库的默认字符集已经被更改为新的字符集,但是所有现有的列仍然保留原来的字符集顺序。更改每个列的字符集是一个非平凡的任务,因为需要删除与列关联的所有索引、全文索引和约束,以及任何用户定义的函数。一旦字符集顺序被更改,可以重新创建索引、约束和函数。这个C#工具简化了这个过程,通过创建一个SQL脚本来完成所有这些工作。
只需运行程序,选择SQL Server数据库和一个新的字符集顺序。有两个选项:可以简单地让程序创建一个SQL脚本,以便以后运行(按“仅脚本”按钮),或者可以实际进行更改(按“脚本并执行”按钮)。需要注意的事项:
要运行脚本,程序将数据库设置为单用户模式以运行ALTER DATABASE [db_name] COLLATE [Collation Name]语句。因此,应该确保在运行脚本之前数据库上没有打开的连接(使用存储过程SP_WHO来识别任何打开的连接)。
由于脚本将删除然后重建数据库中的所有索引和外键,将发现它可能需要很长时间才能完成(可能需要几个小时)。
所有列都将更改为新的字符集顺序,即使它们在运行脚本之前具有非默认字符集。
SQL 2005支持正在逐步添加。如果遇到问题或缺少功能,请告诉。
如果从大小写不敏感的字符集顺序更改为大小写敏感的字符集顺序,可能会发现在重新创建检查约束和函数时出现错误。这是因为脚本将在字符集顺序更改后以大小写敏感的方式进行解析。为了解决这个问题,建议在程序中运行脚本,并在脚本运行完成后查看输出。与每个失败相关的错误消息将在失败的代码下方以红色显示。