資料庫識別碼
適用于:SQL Server
Azure SQL資料庫
Azure SQL 受控執行個體Azure Synapse
Analytics Analytics
Platform System (PDW)
資料庫物件名稱又稱為識別碼。 Microsoft SQL Server中的所有內容都可以有識別碼。 伺服器、資料庫與資料庫物件 (如資料表、檢視、資料行、索引、觸發程序、程序、條件約束、規則) 都可以有識別碼。 大多數物件都需要識別碼,但對部分物件如條件約束,則是選擇性的需求。
定義物件時會建立物件識別碼。 之後就可以使用識別碼來參考物件。 例如,以下陳述式會建立具有識別碼 TableX
的資料表,以及具有識別碼 KeyCol
與 Description
的兩個資料行:
CREATE TABLE TableX
(KeyCol INT PRIMARY KEY, Description nvarchar(80));
這個資料表也有一個未命名的條件約束。 PRIMARY KEY
條件約束沒有識別碼。
識別碼的定序會隨定義的層級而不同。 執行個體層級物件 (如登入和資料庫名稱) 的識別碼會被指派執行個體的預設定序。 而資料庫中物件 (如資料表、檢視和資料行名稱) 的識別碼,則會被指派資料庫的預設定序。 例如,在區分大小寫定序的資料庫中,您可以建立名稱相同但大小寫不同的兩個資料表,但在不區分大小寫定序的資料庫中,就不可以建立名稱相同但大小寫不同的兩個資料表。
注意
變數的名稱,或函式和預存程式的參數必須符合 Transact-SQL 識別碼的規則。
識別碼的分類
識別碼分為兩類:
一般識別碼
符合識別碼格式的規則。 在 Transact-SQL 語句中使用一般識別碼時,不會分隔它們。USE AdventureWorks GO SELECT * FROM HumanResources.Employee WHERE NationalIDNumber = 153479919
分隔識別碼
括在雙引號 (") 或方括號 ([ ]) 中的識別碼。 符合識別碼格式規則的識別碼不一定要以符號分隔。 例如:USE AdventureWorks GO SELECT * FROM [HumanResources].[Employee] --Delimiter is optional. WHERE [NationalIDNumber] = 153479919 --Delimiter is optional.
不符合識別碼所有規則的識別碼,必須在 Transact-SQL 語句中分隔。 例如:
USE AdventureWorks
GO
CREATE TABLE [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
(
[Order] [int] NOT NULL,
[SalesOrderDetailID] [int] IDENTITY(1,1) NOT NULL,
[OrderQty] [smallint] NOT NULL,
[ProductID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL,
[UnitPriceDiscount] [money] NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_SalesOrderDetail_Order_SalesOrderDetailID] PRIMARY KEY CLUSTERED
([Order] ASC, [SalesOrderDetailID] ASC)
);
GO
SELECT *
FROM [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
WHERE [Order] = 10; --Identifier is a reserved keyword.
一般識別碼與分隔識別碼都必須包含在 1 到 128 個字元之間。 至於本機暫存資料表,識別碼最多可有 116 個字元。
一般識別碼的規則
變數、函式和預存程式的名稱必須符合 Transact-SQL 識別碼的下列規則。
第一個字元必須是以下任一項:
Unicode Standard 3.2 所定義的字母。 Unicode 的字母定義包括從 a 到 z 以及從 A 到 Z 的拉丁字元,還有其他語系中的字母字元。
底線 (_)、@ 符號或數字符號 (#)。
識別碼開頭的特定符號在SQL Server中具有特殊意義。 以 @ 符號開頭的一般識別碼代表本機變數或參數,而且不能做為任何其他類型之物件的名稱。 開頭為 # 符號的識別碼代表暫存資料表或程序。 開頭為兩個 ## 符號的識別碼代表全域暫存物件。 雖然 # 符號或兩個 ## 符號字元可做為其他類型之物件的名稱開頭,但是不建議此用法。
某些 Transact-SQL 函式的名稱開頭為雙引號 (@@) 。 為了避免與這些功能產生混淆,不應該使用以 @@ 為開頭的名稱。
可包含的後續字元如下:
Unicode Standard 3.2 所定義的字母。
其他基本拉丁文或其他國家 (地區) 字集中的十進位數字。
at 符號 (@) 、貨幣符號 ($) 、數位記號 (#) 或底線 (_) 。
識別碼不得為 Transact-SQL 保留字。 SQL Server保留大寫和小寫版本的保留字。 當 Transact-SQL 語句中使用識別碼時,不符合這些規則的識別碼必須以雙引號或括弧分隔。 保留字取決於資料庫相容性層級。 這個層級可以使用 ALTER DATABASE 陳述式加以設定。
不允許內嵌的空格或特殊字元。
不允許補充字元。
當 Transact-SQL 語句中使用識別碼時,不符合這些規則的識別碼必須以雙引號或括弧分隔。
注意
某些有關於一般識別碼格式的規則,取決於資料庫的相容性層級。 您可以使用 ALTER DATABASE來設定這個層級。
另請參閱
ALTER TABLE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
CREATE RULE (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)