COLLATE (Transact-SQL)排序规则

COLLATE (Transact-SQL)

SQL Server 2014

一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则转换。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

COLLATE { <collation_name> | database_default }
<collation_name> :: = 
     { Windows_collation_name } | { SQL_collation_name }

参数

  • collation_name

  • 应用于表达式、列定义或数据库定义的排序规则的名称。 collation_name 只能是指定的 Windows_collation_name  SQL_collation_name collation_name 必须是文字值。 collation_name 不能用变量或表达式表示。

    Windows_collation_name 是用于 Windows 排序规则名称的排序规则名称。

    SQL_collation_name 是用于 SQL Server 排序规则名称的排序规则名称。

    在数据库定义级别应用排序规则时,仅 Unicode 的 Windows 排序规则不能与 COLLATE 子句一起使用。

  • database_default

  • 使 COLLATE 子句继承当前数据库的排序规则。

注释

可以在多个级别指定 COLLATE 子句。 其中包括:

  1. 创建或更改数据库。

    可以使用 CREATE DATABASE 或 ALTER DATABASE 语句的 COLLATE 子句指定数据库的默认排序规则。 还可以在使用 SQL Server Management Studio 创建数据库时指定排序规则。 如果不指定排序规则,则将为数据库分配 SQL Server 实例的默认排序规则。

    注意 注意

    Windows 的仅 Unicode 排序规则只能与 COLLATE 子句一起使用,将排序规则应用于列级和表达式级数据的 ncharnvarchar  ntext 数据类型,而不能与 COLLATE 子句一起使用来更改数据库或服务器实例的排序规则。

  2. 创建或更改表列。

    可以使用 CREATE TABLE 或 ALTER TABLE 语句的 COLLATE 子句指定每个字符串列的排序规则。 还可以在使用 SQL Server Management Studio 创建表时指定排序规则。 如果不指定排序规则,将为列分配数据库的默认排序规则。

    还可使用 COLLATE 子句中的 database_default 选项,指定临时表中的列使用连接的当前用户数据库(而不是 tempdb)的默认排序规则。

  3. 转换表达式的排序规则。

    可以使用 COLLATE 子句将字符表达式应用于某个排序规则。 为字符文本和变量分配当前数据库的默认排序规则。 为列引用分配列的定义排序规则。

标识符的排序规则取决于定义标识符的级别。 为实例级对象(如登录名和数据库名)的标识符分配实例的默认排序规则。 为数据库对象(如表、视图和列名)的标识符分配数据库的默认排序规则。 例如,对于名称差别仅在于大小写的两个表,可在使用区分大小写排序规则的数据库中创建,而不能在使用不区分大小写排序规则的数据库中创建。 有关详细信息,请参阅数据库标识符

当连接上下文与某个数据库相关时,可以创建变量、GOTO 标签、临时存储过程和临时表,且当已将上下文切换到其他数据库时引用它们。 变量、GOTO 标签、临时存储过程和临时表的标识符位于服务器实例的默认排序规则中。

COLLATE 子句只能应用于 charvarchartextncharnvarchar  ntext 数据类型。

COLLATE 使用 collate_name 来引用 SQL Server 排序规则或 Windows 排序规则的名称,以应用于表达式、列定义或数据库定义。 collation_name 只能是指定的Windows_collation_name  SQL_collation_name,参数必须包含文字值。 collation_name 不能用变量或表达式表示。

排序规则一般由排序规则名称标识,安装过程中除外。 在安装过程中,您应该为 Windows 排序规则指定根排序规则指示符(排序规则区域设置),然后指定区分或不区分大小写或重音的排序选项。

可以执行系统函数 fn_helpcollations 来检索 Windows 排序规则和 SQL Server 排序规则的所有有效排序规则名称的列表:

SELECT name, description
FROM fn_helpcollations();

SQL Server 只支持由基础操作系统支持的代码页。 在执行取决于排序规则的操作时,引用的对象所使用的 SQL Server 排序规则必须使用计算机上运行的操作系统所支持的代码页。 这些操作可能包括:

  • 当创建或更改数据库时,为数据库指定默认排序规则。

  • 当创建或更改表时,为列指定排序规则。

  • 当还原或附加数据库时,操作系统必须支持数据库的默认排序规则,并支持数据库中的任何 charvarchar  text 列或参数的排序规则。

    char  varchar 数据类型支持代码页转换,但是 text 数据类型不支持。 不报告代码页转换过程中的数据丢失。

如果被引用的对象所使用或指定的排序规则使用 Windows 不支持的代码页,则 SQL Server 将显示错误。

示例

A.在选择过程中指定排序规则

下面的示例创建一个简单表并插入 4 行。 然后,该示例在从表中选择数据时应用了两个排序规则,演示 Chiapas 如何以不同方式排序。

Transact-SQL

CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
                             , ('Cinco Rios'), ('California');
GO
--Apply an typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO

这里是第一个查询的结果。

Place

-------------

California

Chiapas

Cinco Rios

Colima

这里是第二个查询的结果。

Place

-------------

California

Cinco Rios

Colima

Chiapas

B.其他示例

有关使用 COLLATE 的其他示例,请参阅 CREATE DATABASE (SQL Server Transact-SQL) 示例 G. 创建数据库并指定排序规则名称和选项以及 ALTER TABLE (Transact-SQL)示例 V. 更改列排序规则

你可能感兴趣的:(collate)