【问题标题】:Can you set collation of T-SQL Variable?你可以设置 T-SQL 变量的排序规则吗?
【发布时间】:2019-10-24 12:42:22
【问题描述】:

我搜索了高低都找不到答案,你能设置一个变量的排序规则吗?根据MS documentation,似乎只有在 SQL Azure 上才有可能:

-- Azure SQL 数据仓库和并行数据仓库的语法
声明
{{ @local_variable [AS] data_type } [ =value [ COLLATE ] ] } [,...n]

目前我必须这样做:

DECLARE @Test nvarchar(10) = N'Crud';

IF ( @Test = N'Crud' COLLATE Latin1_General_CS_AI )
    Print N'Crud';
IF ( @Test = N'cRud' COLLATE Latin1_General_CS_AI )
    Print N'cRud';
IF ( @Test = N'crUd' COLLATE Latin1_General_CS_AI )
    Print N'crUd';
IF ( @Test = N'cruD' COLLATE Latin1_General_CS_AI )
    Print N'cruD';

什么时候我想做的是:

DECLARE @Test nvarchar(10) = N'Crud' COLLATE Latin1_General_CS_AI;

IF ( @Test = N'Crud' )
    Print N'Crud';
IF ( @Test = N'cRud' )
    Print N'cRud';
IF ( @Test = N'crUd' )
    Print N'crUd';
IF ( @Test = N'cruD' )
    Print N'cruD';

我猜答案是否定的,但我想确认一下,至少,需要此信息的其他人会得到明确的答案。

非常感谢。

【问题讨论】:

  • 我 99% 确定答案是否定的,因为不久前有一个关于它的 SO 问题,但很难知道要搜索什么。
  • 直接放到SSMS里自己试试吧……
  • 是的,因为我喜欢不先测试就发布东西:)

标签: sql-server tsql sql-server-2014


【解决方案1】:

嗯,你猜对了。
在大多数 SQL Server 系统中,(不包括 Azure SQL 数据仓库和并行数据仓库)可以在四个级别上设置排序规则:

  1. The default collation of the SQL Server instance:

    服务器排序规则充当与 SQL Server 实例一起安装的所有系统数据库以及任何新创建的用户数据库的默认排序规则。

  2. The default collation of a specific database:

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

  3. 您可以为表格的列设置排序规则:

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

  4. 您可以使用Collate 子句为特定表达式设置排序规则:

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

所以是的,除了 Azure SQL 数据仓库和并行数据仓库,您不能在本地标量变量上设置排序规则。

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多