指定利用 ALTER TABLE 加入資料表之資料行的屬性。
語法
column_name <data_type>
[ FILESTREAM ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
[
[ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]
| IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]
]
[ ROWGUIDCOL ]
[ SPARSE ]
[ <column_constraint> [ ...n ] ]
<data type> ::=
[ type_schema_name . ] type_name
[ ( precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]
<column_constraint> ::=
[ CONSTRAINT constraint_name ]
{ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[
WITH FILLFACTOR = fillfactor
| WITH ( < index_option > [ , ...n ] )
]
[ ON { partition_scheme_name ( partition_column_name )
| filegroup | "default" } ]
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
引數
column_name
要改變、加入或卸除的資料欄名稱。 column_name 可有 1 到 128 個字元。 如果是以 timestamp 資料類型建立的新資料行,可以省略 column_name。 如果 timestamp 資料類型資料行未指定任何 column_name,便會使用 timestamp 這個名稱。[ type_schema_name**.**] type_name
這是加入的資料行之資料類型及它所屬的結構描述。type_name 有下列幾種:
Microsoft SQL Server 系統資料類型。
基於 SQL Server 系統資料類型的別名資料類型。 別名資料類型必須先利用 CREATE TYPE 建立,之後,才能在資料表定義中使用它們。
Microsoft .NET Framework 使用者自訂類型及其所屬的結構描述。 .NET Framework 使用者自訂類型必須先利用 CREATE TYPE 建立,之後,才能在資料表定義中使用它。
如果未指定 type_schema_name,Microsoft Database Engine 會依照下列順序來參考 type_name:
SQL Server 系統資料類型。
目前資料庫中之目前使用者的預設結構描述。
目前資料庫中的 dbo 結構描述。
precision
這是指定之資料類型的有效位數。 如需有關有效位數值的詳細資訊,請參閱<有效位數、小數位數和長度 (Transact-SQL)>。scale
這是指定資料類型的小數位數。 如需有關有效小數位數值的詳細資訊,請參閱<有效位數、小數位數和長度 (Transact-SQL)>。max
只適合 varchar、nvarchar 和 varbinary 等資料類型。 這些資料類型用來儲存 2^31 位元組的字元和二進位資料,以及 2^30 位元組的 Unicode 資料。CONTENT
指定 column_name 中 xml 資料類型的每個執行個體都可以包含多個最上層元素。 CONTENT 只適用於 xml 資料類型,而且只有在同時指定 xml_schema_collection 時,才能指定。 如果未指定這個項目,CONTENT 便是預設行為。DOCUMENT
指定 column_name 中 xml 資料類型的每個執行個體都只能包含一個最上層元素。 DOCUMENT 只適用於 xml 資料類型,而且只有在同時指定 xml_schema_collection 時,才能指定。xml_schema_collection
只適合 xml 資料類型用來將 XML 結構描述集合關聯於類型。 在結構描述中輸入 xml 資料行之前,必須先利用 CREATE XML SCHEMA COLLECTION,在資料庫中建立結構描述。FILESTREAM
選擇性地針對具有 varbinary(max) 之 type_name 的資料行指定 FILESTREAM 儲存屬性。當針對資料行指定 FILESTREAM 時,資料表也必須要有 uniqueidentifier 資料類型的資料行 (此類型具有 ROWGUIDCOL 屬性)。 這個資料行不能允許 null 值,且必須具有 UNIQUE 或 PRIMARY KEY 單一資料行條件約束。 資料行的 GUID 值必須在插入資料時由應用程式提供,或是由使用 NEWID () 函數的 DEFAULT 條件約束所提供。
ROWGUIDCOL 資料行無法卸除,而且當資料表有定義 FILESTREAM 資料行時,無法變更相關的條件約束。 只有當最後一個 FILESTREAM 資料行卸除之後,才可卸除 ROWGUIDCOL 資料行。
當有針對資料行指定 FILESTREAM 儲存屬性時,該資料行的所有值都會儲存在檔案系統的 FILESTREAM 資料容器內。
如需示範如何使用資料行定義的範例,請參閱<FILESTREAM (SQL Server)>。
COLLATE collation_name
指定資料行的定序。 若未指定,就會將資料庫的預設定序指派給資料行。 定序名稱可以是 Windows 定序名稱,也可以是 SQL 定序名稱。 如需清單和詳細資訊,請參閱<Windows 定序名稱 (Transact-SQL)>和<SQL Server 定序名稱 (Transact-SQL)>。COLLATE 子句只能用來指定 char、varchar、nchar 和 nvarchar 資料類型的資料行定序。
如需有關 COLLATE 子句的詳細資訊,請參閱<COLLATE (Transact-SQL)>。
NULL | NOT NULL
判斷資料行中是否允許 Null 值。 嚴格來說,NULL 並不算是條件約束,但是您可以如同指定 NOT NULL 一樣加以指定。[ CONSTRAINT constraint_name ]
指定開始定義 DEFAULT 值。 若要維持與舊版 SQL Server 的相容性,您可以將條件約束名稱指派給 DEFAULT。 constraint_name 必須遵照識別碼的規則,不過,名稱開頭不能是數字符號 (#)。 如果未指定 constraint_name,便會將系統產生的名稱指派給 DEFAULT 定義。DEFAULT
這是指定資料行預設值的關鍵字。 您可以利用 DEFAULT 定義來提供現有資料列之新資料行的值。 timestamp 資料行或含 IDENTITY 屬性的資料行不能套用 DEFAULT 定義。 如果使用者定義型別資料行指定了預設值,類型必須支援將 constant_expression 隱含地轉換成使用者定義型別。constant_expression
這是用來作為資料行預設值的常值、NULL 或系統函數。 如果結合定義為 .NET Framework 使用者自訂類型的資料行來使用,類型的實作必須支援從 constant_expression 到使用者自訂類型的隱含轉換。WITH VALUES
指定將 DEFAULT constant_expression 中所提供的值儲存在加入現有資料列的新資料行。 如果加入的資料行允許 NULL 值,且指定了 WITH VALUES,就會將預設值儲存在加入現有資料列的新資料行中。 如果允許 NULL 的資料行沒有指定 WITH VALUES,就會將 NULL 值儲存在現有資料列的新資料行中。 如果新資料行不允許 NULL,就會將預設值儲存在新資料列中,不論是否指定了 WITH VALUES,都是如此。IDENTITY
指定新資料行是識別欄位。 SQL Server Database Engine 會提供資料行的唯一累加值。 將識別碼資料行加入現有資料表時,識別碼便會加入至資料表中含有初始值和遞增值的現有資料列。但是,無法保證資料列的更新順序。 任何加入的新資料列也都會產生識別碼。識別欄位通常用來結合 PRIMARY KEY 條件約束一起使用,作為資料表的唯一資料列識別碼。 IDENTITY 屬性可以指派給 tinyint、smallint、int、bigint、decimal(p,0) 或 numeric(p,0) 資料行。 每份資料表都只能建立一個識別欄位。 DEFAULT 關鍵字和繫結的預設值無法搭配識別欄位來使用。 您必須同時指定種子和遞增,或同時不指定這兩者。 如果同時不指定這兩者,預設值便是 (1,1)。
[!附註]
您不能修改現有的資料表資料行來加入 IDENTITY 屬性。
不支援將識別欄位加入已發行的資料表中,因為當資料行複寫到訂閱者時,它可能造成非聚合。 簽發者端識別欄位中的值,隨著受影響的資料表之資料列的實際儲存順序而不同。 訂閱者端可能會用不同的方式來儲存這些資料列;因此,相同資料列可能會有不同的識別欄位值。
若要允許明確插入值來停用資料行的 IDENTITY 屬性,請使用 SET IDENTITY_INSERT。
seed
這是載入資料表的第一個資料列所用的值。increment
這是加入先前載入的資料列之識別值的累加值。NOT FOR REPLICATION
可以指定給 IDENTITY 屬性。 如果 IDENTITY 屬性指定了這個子句,當複寫代理程式執行插入作業時,值不會在識別欄位中累加。ROWGUIDCOL
指定資料行是一個資料列全域唯一識別碼資料行。 ROWGUIDCOL 只能指派給 uniqueidentifier 資料行,且每份資料表都只能有一個 uniqueidentifier 資料行指定為 ROWGUIDCOL 資料行。 ROWGUIDCOL 不能指派給使用者自訂資料類型的資料行。ROWGUIDCOL 不會強制執行資料行所儲存之值的唯一性。 另外,ROWGUIDCOL 也不會自動產生插入資料表之新資料列的值。 若要產生每個資料行的唯一值,請在 INSERT 陳述式上使用 NEWID 函數,或將 NEWID 函數指定為資料行的預設值。 如需詳細資訊,請參閱<NEWID (Transact-SQL)>和<INSERT (Transact-SQL)>。
SPARSE
指出此資料行是疏鬆資料行。 疏鬆資料行的儲存體會針對 Null 值最佳化。 疏鬆資料行無法指定為 NOT NULL。 如需有關疏鬆資料行的其他限制和詳細資訊,請參閱<使用疏鬆資料行>。<column_constraint>
如需有關資料行條件約束引數的定義,請參閱<column_constraint (Transact-SQL)>。
備註
如果加入的資料行有 uniqueidentifier 資料類型,您可以利用預設值來定義它,預設值利用 NEWID() 函數,在資料表之每個現有資料列的新資料行中提供唯一識別碼值。
Database Engine 不會強制在資料行定義中指定 DEFAULT、IDENTITY、ROWGUIDCOL 或資料行條件約束的順序。
如果加入資料行會造成資料列大小超過 8060 位元組,則 ALTER TABLE 陳述式會失敗。
範例
如需範例,請參閱<ALTER TABLE (Transact-SQL)>。