在区分大小写的数据库中的 NCHAR 和 NVARCHAR 表达式

在以 NLSCASE INSENSITIVE 属性创建的数据库中,数据库服务器在 NCHAR 和 NVARCHAR 表达式中相同字母的大写变量与小写变量之间不做区分,不论是否为语言环境定义了本地化的次序顺序。

如果在关系运算符的运算对象之中,或在字符串函数的参数之中,字母大小写变量是唯一的区别,则与在区分大小写的数据库中同一表达式上的同一操作相对比,对字母大小的这种忽略可更改 NCHAR 或 NVARCHAR 表达式上区分大小写的操作返回的值。

例如,假设对于缺省的语言环境中的数据库的表中的记录,NCHAR 列 lname 存储值 McDavid

在区分大小写的数据库中,布尔表达式 lname > "MCDAVID" 求值为真,因为数据库服务器使用缺省的语言环境的代码集顺序来比较这两个运算对象。虽然两个字符串都是以大写字母 M 开头,但该列值中的下一字符是小写字母 c(ASCII 99 代码点),但括起来的字符串中的下一字符是大写字母 C( ASCII 67 代码点)。由于 99 大于 67,因此,在区分大小写的数据库中,列值大于括起来的字符串。

然而,在不区分大小写的数据库中,同一表达式 lname > "MCDAVID" 求值为假,因为在数据库服务器比较这两个运算对象时,它不管字母大小写变量。两个字符串都有同样序列的同样字符,因此按照这些标准,列值与括起来的字符串是一样的。

在包括 NCHAR 或 NVARCHAR 运算对象的比较过程中,由于有 NLSCASE INSENSITIVE 属性的数据库不管字母的大小写, 因此,在不区分大小写的数据库中,在 NCHAR 或 NVARCHAR 字符串上的操作产生的结果可不同于在区分大小写的数据库中的结果。 区分大小写的数据库在其中的上下文与不区分大小写的数据库在其中的上下文可能使用相同的 SQL 操作来从相同的数据集返回不同的结果,包括这些:
  • 排序和次序
  • 外键和主键依赖
  • 强制唯一的约束
  • 集群化的索引
  • 访问方式优化器伪指令
  • 带有 WHERE 谓词的查询
  • 在 projection 子句中带有 UNIQUE 或 DISTINCT 的查询
  • 带有 ORDER BY 子句的查询
  • 带有 GROUP BY 子句的查询
  • 级联的 DELETE 操作
  • 表或索引存储分发 BY EXPRESSION
  • 表或索引存储分发 BY LIST
  • 来自 UPDATE STATISTICS 操作的数据分发。