分布式查询中的排序规则
SQL Server 2005 支持多个排序规则。各个列可使用不同的排序规则,并且每个字符值都有一个相关联的排序规则属性。SQL Server 可理解来自远程数据源的字符数据的排序规则属性,并进行相应的处理。
SQL Server 使用远程数据的排序规则对字符数据(Unicode 和非 Unicode)进行比较和排序操作。根据数据源是否对应于 SQL Server 实例,会采取不同方式确定远程字符数据的排序规则信息:
- Microsoft SQL Native Client OLE DB 访问接口自动报告该访问接口返回的每列的排序规则。
- 对于不在 SQL Server 中但已知其排序规则与 SQL Server 支持的排序规则之一相同的远程表,管理员可以指定 OLE DB 数据源的默认排序规则作为链接服务器定义的一部分。然后,SQL Server 可以将该默认排序规则作为从该链接服务器返回的所有列的排序规则。
SQL Server 确定远程字符列的排序规则后,SQL Server 将遵循与本地列相同的规则对远程表列进行转换、比较和操作。有关 SQL Server 应用于排序规则以及 SQL Server 支持的排序规则名称的规则的详细信息,请参阅使用排序规则。
如果默认远程数据库的排序规则与当前本地数据库的排序规则不同,则远程字符串将被作为 Unicode 来处理。若要确保统一处理所有远程服务器的字符串,请执行以下操作:
- 使用 Unicode 格式 (N**'string'**) 在分布式查询中指定字符串文字。
- 定义包含显式目标数据库(而不是依赖于默认远程数据库)的链接服务器。此数据库可能具有不同的排序规则。
定义链接服务器选项
下列使用 sp_serveroption 定义的链接服务器选项可以控制 SQL Server 是否及如何使用链接服务器的排序规则:
- use remote collation 选项指定是使用远程列的排序规则还是使用本地服务器的排序规则。如果该选项为 true,则远程列的排序规则将用于 SQL Server 数据源,而 collation name 中指定的排序规则将用于 SQL Server 之外的数据源。如果该选项为 false,则分布式查询始终使用本地服务器实例的默认排序规则,将忽略 collation name 和远程列的排序规则。
- 如果 use remote collation 为 true 且数据源不是 SQL Server 数据源,则 collation name 选项将指定远程数据源所用排序规则的名称。该名称必须是 SQL Server 支持的排序规则之一。当您访问其排序规则与 SQL Server 排序规则之一匹配的 OLE DB 数据源(而不是 SQL Server)时,请使用此选项。SQL Server 数据源将报告其列排序规则,并且对于引用 SQL Server 数据源的链接服务器,将忽略 collation name。
注意: 使用远程排序规则的唯一方式是使用链接服务器选项。因此,所构造的使用 OPENROWSET 和 OPENDATASOURCE 提供的即席名称的查询不能使用远程字符数据的排序规则信息。此外,将升级到 SQL Server 2000 或更高版本的 SQL Server 7.0 中的所有链接服务器设置为 use remote collation=false。
选项设置摘要
下表总结了当 use remote collation 设置为 true (或 on)时,SQL Server 如何确定用于每列的排序规则。
链接服务器类型 | 未设置 collation name | 已设置 collation name(为 CollX) |
---|---|---|
SQL Server |
远程列的实际排序规则。 |
远程列的实际排序规则。 |
其他 |
本地 SQL Server 实例的默认排序规则。 |
CollX |
下表总结了当 use remote collation 设置为 false(或 off)时,SQL Server 如何确定用于每列的排序规则。
链接服务器类型 | 未设置 collation name | 已设置 collation name(为 CollX) |
---|---|---|
SQL Server |
本地 SQL Server 实例的默认排序规则。 |
本地 SQL Server 实例的默认排序规则。 |
其他 |
本地 SQL Server 实例的默认排序规则。 |
本地 SQL Server 实例的默认排序规则。 |