Sto*_*orm 3 t-sql sql-server sql-server-2014
我到处搜索但找不到答案,你能设置变量的排序规则吗?根据MS 文档,似乎只能在 SQL Azure 上实现:
-- Azure SQL 数据仓库和并行数据仓库的语法
DECLARE
{{ @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';
Run Code Online (Sandbox Code Playgroud)
当我想做的是这样的时候:
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';
Run Code Online (Sandbox Code Playgroud)
我猜答案是否定的,但我想确认一下,至少,其他需要此信息的人会得到明确的答案。
非常感激。
嗯,你猜对了。
在大多数 SQL Server 系统中(即不包括 Azure SQL 数据仓库和并行数据仓库)可以在四个级别上设置排序规则:
服务器排序规则充当随 SQL Server 实例安装的所有系统数据库以及任何新创建的用户数据库的默认排序规则。
您可以使用 CREATE DATABASE 或 ALTER DATABASE 语句的 COLLATE 子句来指定数据库的默认排序规则。您还可以在使用 SQL Server Management Studio 创建数据库时指定排序规则。如果不指定排序规则,则会为数据库分配 SQL Server 实例的默认排序规则。
您可以为表的列设置排序规则:
您可以使用CREATE TABLE或ALTER TABLE语句的 COLLATE 子句指定每个字符串列的排序规则。您还可以在使用 SQL Server Management Studio 创建表时指定排序规则。如果不指定排序规则,则为该列分配数据库的默认排序规则。
您可以使用以下子句为特定表达式设置排序规则Collate:
您可以使用 COLLATE 子句将字符表达式应用于特定排序规则。字符文字和变量被分配当前数据库的默认排序规则。列引用被分配列的定义排序规则。
因此,是的,除了 Azure SQL 数据仓库和并行数据仓库之外,您无法在本地标量变量上设置排序规则。