2

我有一组 CRM 2011 数据库,所有这些数据库都安装在运行 SQL 2008 R2 的同一 SQL 服务器上。其中一个数据库的排序规则为Modern_Spanish_Cl_Al,而所有其他数据库都设置为Latin1_General_Cl_Al。我希望所有这些都设置为 Latin1,所以我想返回并修复西班牙语数据库,使其与其他数据库一样。

如何将数据库排序规则从 更改Modern_Spanish_Cl_AlLatin1_General_Cl_Al

我尝试使用 UI 在数据库级别执行此操作,但收到一百万个错误,例如:

统计信息“TeamBase.fndx_Sync_VersionNumber”取决于数据库排序规则。如果模式绑定对象依赖于它,则无法更改数据库排序规则。删除对数据库排序规则的依赖项,然后重试该操作。

我尝试在使用 UI 的同时进入列级别,但收到了不同的错误消息:

不允许保存更改。您所做的更改需要删除并重新创建以下表...

我正在测试环境中处理这个问题,所以我愿意进行实验,并且我意识到如果不破坏 CRM,我正在尝试做的事情可能是不可能的。

4

1 回答 1

1

您是否尝试使用正确的排序规则创建新数据库

CREATE DATABASE DatabaseName COLLATE Latin1_General_Cl_Al;

然后备份 - 将您的数据库以不正确的排序规则恢复到新的数据库中?
如果这可行,您必须使用部署管理器中的“导入组织向导”基于新数据库导入新组织。

编辑

在研究了这一点之后,即使在进行备份/恢复时,似乎也很难更改排序规则。
如果要更改数据库级别的排序规则,您唯一的选择似乎是

ALTER DATABASE ... COLLATE 

但这只会影响新对象。然后,您必须使用 ALTER TABLE 来更改现有表。

此外,由于排序规则指定了数据的排序和存储方式,因此您需要导出所有数据并再次将其引入(例如使用 BCP 和 BULK INSERT)。

除此之外,列的某些属性会阻止其排序规则被更改(例如某些约束和模式绑定函数引用)。如果您确实想更改整个数据库的排序规则,最简单的方法可能是编写数据库脚本并使用正确的排序规则创建一个新数据库,然后将数据洗牌到新数据库中。

于 2013-06-17T11:40:04.250 回答