数据库排序规则更改问题 (SQL Server 2008)
Posted
技术标签:
【中文标题】数据库排序规则更改问题 (SQL Server 2008)【英文标题】:Problem with database collation change (SQL Server 2008) 【发布时间】:2011-11-14 08:01:41 【问题描述】:当我尝试将现有数据库(包括数据)的排序规则从 ARABIC_CS_AS
更改为 PERSIAN_100_CS_AS
时,出现以下错误:
数据库“XXXX”的更改失败。 (Microsoft.SqlServer.Smo)
执行 Transact-SQL 语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
对象“ItemTables”依赖于数据库排序规则。如果模式绑定对象依赖于它,则无法更改数据库排序规则。删除对数据库排序规则的依赖项,然后重试该操作。 对象“CK_FilteredReportColumnFilters”取决于数据库排序规则。如果模式绑定对象依赖于它,则无法更改数据库排序规则。删除对数据库排序规则的依赖项,然后重试该操作。 对象“CK_FilteredReportColumnFilters_1”取决于数据库排序规则。如果模式绑定对象依赖于它,则无法更改数据库排序规则。删除对数据库排序规则的依赖项,然后重试该操作。 对象“CK_FilteredReportColumnFilters_2”取决于数据库排序规则。如果模式绑定对象依赖于它,则无法更改数据库排序规则。删除对数据库排序规则的依赖项,然后重试该操作。 对象“CK_Reports”依赖于数据库排序规则。如果模式绑定对象依赖于它,则无法更改数据库排序规则。移除对数据库排序规则的依赖,然后重试该操作。
ALTER DATABASE 失败。数据库“XXXX”的默认排序规则不能设置为 Persian_100_CS_AS。 (Microsoft SQL Server,错误:5075)
尝试通过删除这些数据库对象来纠正提到的错误会导致转换过程中其他标题出现另一个错误。
有什么想法吗?有没有明确的解决方案来解决这个问题?
【问题讨论】:
Change collation on clustered index column in SQL 2005的可能重复 【参考方案1】:啊,这是 SQL Server 中最严重的问题之一:一旦创建了对象,就无法更改排序规则(对于表和数据库都是如此......)。
您只能保存数据(不要使用 bcp 或备份实用程序,您需要将它们放在类似文件类型的 csv 中...),删除数据库,使用正确的排序规则重新创建并重新导入数据到新数据库中...
希望这会有所帮助。
【讨论】:
实际上你可以在不删除表的情况下更改列的排序规则。除了依赖的列,例如通过计算列、约束或索引。 您可以删除依赖项并重新创建它们。【参考方案2】:我遇到了同样的问题,所有对象都是函数 首先进行完整备份
脚本函数作为创建。 删除这些函数然后运行
use master
go
ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE xxx COLLATE yyyy
go
ALTER DATABASE xxx SET MULTI_USER
go
重新创建函数
我希望这会有所帮助。
【讨论】:
如果模式绑定对象依赖于它,则无法更改数据库排序规则。检查约束和存储过程(如果我没记错的话),不允许排序规则更改。【参考方案3】:只需使用 ex database_b 创建新数据库。根据您的要求更改排序规则并 从新源导出到目标。
或
使用 alt 排序工具,它将覆盖所有错误。
--应用程序
【讨论】:
什么是替代排序工具?【参考方案4】:由于我的计算列,我遇到了这个问题,所以我只是取消计算列,然后更改排序规则,然后将列更改为计算列。它对我有用
【讨论】:
【参考方案5】:在写你的字符串之前输入 N。
例如:
insert into table values (N'yourstring')
N = unicode。
【讨论】:
以上是关于数据库排序规则更改问题 (SQL Server 2008)的主要内容,如果未能解决你的问题,请参考以下文章