在 SQL 2005 中更改聚集索引列的排序规则

Posted

技术标签:

【中文标题】在 SQL 2005 中更改聚集索引列的排序规则【英文标题】:Change collation on clustered index column in SQL 2005 【发布时间】:2010-10-09 13:15:45 【问题描述】:

我有一个使用不正确的排序规则创建的数据库。我更改了数据库的排序规则,但这也使各个列的排序规则不正确。这给我带来了麻烦。

因此,我编写了一个脚本来循环遍历并更改各个列的排序规则,这基本上可以工作,除了一些列是其各自表上的聚集索引的一部分。这些我无法改变。

例如,如果我运行:

ALTER TABLE MyTable 
ALTER COLUMN MyColumn varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL

我收到以下回复:

Msg 5074, Level 16, State 1, Line 1
The object 'DF_MyTable_MyColumn' is dependent on column 'MyColumn'.
Msg 5074, Level 16, State 1, Line 1
The object 'PK_MyTable_MyColumn_MyOtherColumn' is dependent on column 'MyColumn'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE ALTER COLUMN deleted failed because one or more objects access this column.

有没有办法解决这个问题来更改这些列的排序规则?显然,我不能删除索引,因为它构成了主键。我想我可以暂时删除 PK,但我不想这样做。

【问题讨论】:

【参考方案1】:

您必须删除所有依赖项。

当您更改数据库排序规则时,您只会更改系统表。 所有其他文本类型的列都需要手动更改。

一般来说,MS KB 325335 可以选择如何为整个数据库和所有列执行此操作

【讨论】:

以上是关于在 SQL 2005 中更改聚集索引列的排序规则的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中更改非聚集索引以添加更多包含的列

SQL Server 2005 排序规则问题

如何检查 SQL Server 2005 中是不是存在非聚集索引

具有许多包含列的 SQL Server 范围索引

SQL Server 中索引的排序规则

具有包含性列的索引