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. 更改列排序规则

转载于:https://my.oschina.net/u/2301207/blog/363237

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值