共用方式為


column_definition (Transact-SQL)

指定利用 ALTER TABLE 加入資料表之資料行的屬性。

適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。

主題連結圖示 Transact-SQL 語法慣例

語法

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

    適用於:SQL Server 2008 至 SQL Server 2014。

    只適合 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

    適用於:SQL Server 2008 至 SQL Server 2014。

    可以指定給 IDENTITY 屬性。 如果 IDENTITY 屬性指定了這個子句,當複寫代理程式執行插入作業時,值不會在識別欄位中累加。

  • ROWGUIDCOL

    適用於:SQL Server 2008 至 SQL Server 2014。

    指定資料行是一個資料列全域唯一識別碼資料行。 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)>。

請參閱

參考

ALTER TABLE (Transact-SQL)