【问题标题】:Changing collation on schema更改架构上的排序规则
【发布时间】:2014-11-06 09:41:29
【问题描述】:

我可以访问collation 设置为SQL_Latin1_General_CP1_CI_AS 的数据库。当然,我希望它是SQL_Latin1_General_CP1_CS_AS。现在的问题是,我不想弄乱的其他模式中已经存在表。那么首先,我可以更改我自己架构的Collation 吗?其次,这是一个好的方法吗?还是有其他更好的方法来处理这种情况?

【问题讨论】:

  • mssqltips.com/sqlservertip/3221/…。您将不得不删除并重新创建索引等。
  • 但是,我还没有任何数据,也没有任何表格。所以只想更改我拥有的架构上的排序规则,或者因为它是空的,所以删除它并使用正确的排序规则创建一个新架构。
  • 还是不能在模式上设置排序规则?
  • 然后您可以例如仅更改默认数据库排序规则,然后创建架构。 msdn.microsoft.com/en-us/library/ms175835.aspx。更改默认数据库排序规则不会影响数据库中的现有对象。
  • 不幸的是我已经失败了:The object 'AVCON_1227776622_ACCES_000' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it. Remove the dependencies on the database collation and then retry the operation 和一堆......

标签: sql sql-server-2008 collation


【解决方案1】:

不能为每个 SQL Server 数据库架构指定默认排序规则。只能为每个 SQL Server 数据库或每个 SQL Server 实例指定默认排序规则。

为 SQL Server 数据库设置默认排序规则不会更改现有数据库对象的排序规则。它只指定创建新数据库对象时默认使用的排序规则。因此,当您需要使用特定排序规则创建多个数据库对象时,您可以预先更改默认数据库排序规则 - 它不会更改现有对象。

ALTER DATABASE MyDatabase COLLATE French_CI_AS ;

但是,当您拥有依赖于数据库排序规则的架构绑定对象时,更改默认数据库排序规则会变得很棘手。然后你会收到以下错误:

The object 'XY' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it.

在这种情况下,最好分别为每一列指定排序规则,如下所示:

CREATE TABLE dbo.MyTable
 (PrimaryKey   int PRIMARY KEY,
  CharCol      varchar(10) COLLATE French_CI_AS NOT NULL
 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2015-04-03
    • 2011-03-28
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多