SQL Server 2008R2 转换排序规则

Ahm*_*sna 8 sql-server sql-server-2008-r2

我有一个使用Arabic_CI_AS排序规则的现有数据库,但我需要将其转换SQL_Latin1_General_CP1_CI_AS为服务器的默认排序规则,但问题是当我使用以下命令时:

USE master;
GO

ALTER DATABASE MyDB
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误消息:

消息 5075,级别 16,状态 1,第 1 行
对象“GetAllSuppliersInCompliance”依赖于数据库整理。如果模式绑定对象依赖于数据库排序规则,则无法更改数据库排序规则。删除对数据库排序规则的依赖,然后重试该操作。

消息 5075,级别 16,状态 1,第 1 行
对象“GetTier1SupplierComplianceStatus”依赖于数据库整理。如果模式绑定对象依赖于数据库排序规则,则无法更改数据库排序规则。删除对数据库排序规则的依赖,然后重试该操作。.....

消息 5072,级别 16,状态 1,第 1 行
ALTER DATABASE 失败。数据库“MyDB”的默认排序规则不能设置为 SQL_Latin1_General_CP1_CI_AS。

因此,我尝试使用以下命令暂时禁用约束:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
Run Code Online (Sandbox Code Playgroud)

然后我执行了第一个命令,但是出现了同样的错误。

Han*_*non 7

假设这些对象是存储过程或视图(而不是表),您需要:

  1. 编写相关对象的脚本
  2. 将它们从数据库中删除(或者只是删除模式绑定)
  3. 更改数据库排序规则
  4. 通过运行您在第一步中创建的脚本重新创建对象。

顺便说一句,你不需要 sp_msforeachtable "ALTER TABLE..."