数据库标识符

数据库对象名称称为其标识符。 Microsoft SQL Server 中的所有内容都可以具有标识符。 服务器、数据库和数据库对象(如表、视图、列、索引、触发器、过程、约束和规则)可以具有标识符。 大多数对象都需要标识符,但对于某些对象(如约束)是可选的。

定义对象时,将创建对象标识符。 然后,该标识符用于引用对象。 例如,以下语句创建一个包含标识符 TableX 的表,并具有两个标识符分别为 KeyColDescription 的列。

CREATE TABLE TableX  
(KeyCol INT PRIMARY KEY, Description nvarchar(80))  

此表还具有未命名的约束。 约束 PRIMARY KEY 没有标识符。

标识符的排序规则取决于其定义的级别。 为实例级对象(如登录名和数据库名)的标识符分配实例的默认排序规则。 数据库中对象的标识符,例如表、视图和列名,会被分配为数据库的默认排序规则。 例如,具有区分大小写排序规则的数据库中可以创建仅大小写不同的两个表,而具有不区分大小写排序规则的数据库中则无法创建。

注释

变量的名称或函数和存储过程的参数必须符合 Transact-SQL 标识符的规则。

标识符类

标识符有两类:

常规标识符
遵守标识符格式的规则。 在 Transact-SQL 语句中使用常规标识符时,它们不需要分隔。

SELECT *  
FROM TableX  
WHERE KeyCol = 124  

分隔标识符
用双引号(“)或方括号([ ])括起来。 符合标识符格式规则的标识符可能不会被分隔。 例如:

SELECT *  
FROM [TableX]         --Delimiter is optional.  
WHERE [KeyCol] = 124  --Delimiter is optional.  

不符合标识符的所有规则的标识符必须在 Transact-SQL 语句中分隔。 例如:

SELECT *  
FROM [My Table]      --Identifier contains a space and uses a reserved keyword.  
WHERE [order] = 10   --Identifier is a reserved keyword.  

常规标识符和分隔标识符必须包含 1 到 128 个字符。 对于本地临时表,标识符最多可以包含 116 个字符。

常规标识符的规则

变量、函数和存储过程的名称必须符合以下 Transact-SQL 标识符规则。

  1. 第一个字符必须是下列字符之一:

    • Unicode 标准 3.2 定义的字母。 字母的 Unicode 定义包括来自 a 到 z、A 到 Z 的拉丁字符,以及其他语言的字母字符。

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

      标识符开头的某些符号在 SQL Server 中具有特殊含义。 以 at 符号开头的常规标识符始终表示局部变量或参数,不能用作任何其他类型的对象的名称。 以数字符号开头的标识符表示临时表或过程。 以双号符号 (##) 开头的标识符表示全局临时对象。 虽然数字符号或双号符号字符可用于开始其他类型的对象的名称,但我们不建议这样做。

      某些 Transact-SQL 函数的名称以双字符@开头(@@)。 为了避免与这些函数混淆,不应使用以 @@开头的名称。

  2. 后续字符可以包括以下内容:

    • Unicode 标准 3.2 中定义的字母。

    • 来自基本拉丁字母或其他国家文字系统的十进制数。

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

  3. 标识符不能是 Transact-SQL 保留字。 SQL Server 保留了保留字的大小写版本。 在 Transact-SQL 语句中使用标识符时,不符合这些规则的标识符必须用双引号或括号分隔。 保留的单词取决于数据库兼容性级别。 可以使用 ALTER DATABASE 语句设置此级别。

  4. 不允许嵌入空格或特殊字符。

  5. 不允许使用补充字符。

在 Transact-SQL 语句中使用标识符时,不符合这些规则的标识符必须用双引号或括号分隔。

注释

常规标识符格式的某些规则取决于数据库兼容性级别。 可以使用 ALTER DATABASE 设置此级别。

另请参阅

ALTER TABLE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE PROCEDURE(Transact-SQL)
创建规则(Transact-SQL)
CREATE TABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
DELETE (Transact-SQL)
INSERT (Transact-SQL)
保留关键字 (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)