语法元素

1.1 标识符

Transact-SQL语言中,对SQL Server数据库及其数据对象(比如表、索引、视图、存储过程、触发器等)需要以名称来进行命名并加以区分,这些名称就称为标识符。在Transact-SQL代码中就可以通过标识符来引用特定的对象。

也就是它们在SQL中特定的叫法。

1.1.1 是否必需

通常情况下,SQL Server服务器、数据库以及各种数据对象都应该有一个标识符,但对于某些对象来说,比如约束,标识符是可选的。尽管如此,还是推荐对每个对象使用标识符。

1.1.2 标识符的排序规则

字符或者字符串之间比较大小的规则称为排序规则。

排序规则控制了字符串的物理存储方式,指定了表示每个字符的位模式及存储和比较字符所使用的规则。

SQL Server的服务器级有排序规则,数据库级也有排序规则,数据对象级还可以设置排序规则。

如何区分和使用排序规则?

1.默认继承规则

下级对象如果没有特别声明自己的排序规则,将自动继承上级对象设置的排序规则。比如服务器设置了一个排序规则,服务器下的所有数据库和对象都将默认继承服务器的排序规则。

(下级 默认 继承 上级的规则)

2.下级优先规则

下级对象如果设置了自己的排序规则,则上级设置的排序规则在下级对象上不再适用。综合上述两个原则,标识符的排序规则默认将继承所在对象所在级别的排序规则。比如数据库对象标识符的排序规则默认就将继承数据库的排序规则。

(下级有自己的想法 那就按下级自己的规则来  的规则)

1.1.3 常规标识符

常规标识符是指按照SQL Server默认的命名规则创建的标识符。在Transact-SQL中如果使用常规标识符将不需要其他任何符号。比如下面的代码中,TableX和KeyCol就是常规标识符。

SELECT *
        FROM TableX
        WHERE KeyCol = 124

常规标识符的命名规则和SQL Server服务器的兼容性级别有关,一般情况下,需要具备下列要求。

1.首字符标识符的第一个字符必须满足下列条件。

● Unicode标准3.2定义的字母,通常就是字母a~z和A~Z。

● 下划线(_)、at符号(@)或数字符号(#)。

2.后续字符标识符的后续字符可以包括:

● Unicode标准3.2中所定义的字母。

● 基本拉丁字符或其他国家/地区字符中的十进制数字。

● at符号(@)、美元符号($)、数字符号或下划线(_)。

3.不能是保留字

常规标识符不能使用SQL Server内部的保留字,比如char。

4.不允许嵌入空格

标识符中不允许嵌入空格。

1.1.4 带分隔符的标识符

不满足上述常规标识符命名规则的标识符在使用时必须使用特定的分隔符。比如我们定义的表名称就是TABLE,这样的标识符是SQL Server内部的保留字,如果非得这样使用,就必须用这样的方式:“TABLE”。(非得用得话,你得给它加引号进行区分)

1.分隔符Transact-SQL中规定下列符号为特定的分隔符。

● 双引号("):用于表示引用的标识符。

● 中括号([]):用于表示括号中的标识符。

2.什么时机使用分隔符

Transact-SQL中常在下列情况下使用分隔符。

● 对象名称或对象名称的组成部分中包含保留字时。

● 使用其他特殊的字符时。

比如下面的代码中就需要使用分隔符。

SELECT * FROM [My Table]
        WHERE [Last Name] = "O' Brien"

提示:常规标识符既可以使用分隔符,也可以不使用分隔符。建议使用常规标识符以避免使用分隔符的麻烦。