亲爱的,目前我正在研究如何处理数据库中排序规则的更改。
有人做出了一个不寻常的决定,创建适合全球使用的重音敏感数据库......但我正在处理这个问题!
原因:改变整理是数据库包含从不同国家收集的数据,而且我们都知道一些文化有自己的字母。
尊重客户,我们的组织希望拥有Accent Insensitive数据库。这将允许用户从服务器请求数据,没有使用本地字符的任何限制。
据我所知,可能有一个选项可以删除约束等等。更改排序规则然后只需将所有内容都恢复原状。在这种情况下,我担心这是否足以影响已有的数据(列)。
另一方面,我在Collation change on 2005 and 2008 server找到了一篇文章。但是,这不包括2012服务器。
此外,我也考虑了这个例子的复杂性。
我相信我不是一个容易的阶段。但我希望得到一些建议,这是最好和最安全的方法来解决这个问题。
感谢您的关注和帮助。
更新让我添加我们拥有的架构:整个系统包含4个数据库和超过1.000个表。所以我的期望是并非所有可能的方式都可以以最佳方式工作。
答案 0 :(得分:0)
为什么所有这些就地升级?因为实际的排序规则是服务器排序规则并且很旧,在最近版本(2000+)的sql server的安装过程中不可用...
我决定丢弃所有那些旧垃圾,所以我必须找到一种方法,允许我转移到带有Windows排序规则的新安装。
我不得不排除数据迁移(创建新数据库和导入数据),因为缺少文档和大量的自定义,触发器,隐藏规则等。
我使用的解决方案(订单很重要):
CHECK
和DEFAULT
约束,然后删除它们现在您可以运行更改列的排序规则所需的ALTER
命令,并更改数据库本身的排序规则。
完成后以相反的顺序重复上述步骤以重建所有需要的对象 碰巧的是,如果数据库是如此古老,你可能会遇到像existing foreign key that references fields with different datatypes这样的搞笑事件。
答案 1 :(得分:0)
更改所有现有列的排序规则真的很痛苦。我建议并行迁移,而不是单独更改每个列。使用仅包含空表的所需排序规则创建新数据库。使用INSERT...SELECT
(或您选择的ETL工具)将数据从旧数据库复制到新数据库,然后创建约束,索引和其他数据库对象。
考虑upvoting Make it easy to change collation on a database SQL Server功能请求。
答案 2 :(得分:0)
互联网上有许多复杂的解决方案可用于内部整理更改,但我们发现最简单(也是最安全)的方法是编写数据库脚本,更改脚本以创建一个新的数据库,并在开始时设置排序规则然后将数据导入新数据库。
我们使用MS SQL Server 2012 Management Studio以下列方式实现此目的:
使用以下2个更改更改脚本,然后运行它以创建新数据库:
a)将DB名称更改为MY-NEW-DB
b)在CREATE DATABASE语句下添加:ALTER DATABASE [MY-NEW-DB]整理Latin1_General_CS_AS