突出重围:Transact-SQL管理与开发实例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 标识符

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

在Transact-SQL代码中就可以通过标识符来引用特定的对象,这和生活中每个公民都有自己的名字是一样的道理。

1.1.1 必须有标识符吗

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

尽管如此,还是推荐对每个对象使用标识符。

1.1.2 标识符的排序规则

在使用Transact-SQL时,经常会有比较数据、字符和字符串大小的需求,因此,必须建立有默认的比较大小的规则,比如“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"

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