CREATE TABLE
[ database_name.[ owner ] .| owner.] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]
< column_definition > ::= { column_name data_type }
[ COLLATE < collation_name > ]
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]
< column_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ON {filegroup | DEFAULT} ] ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}
< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}
最佳答案:
參數(shù)
database_name
是要在其中創(chuàng)建表的數(shù)據庫名稱database_name 必須是現(xiàn)有數(shù)據庫的名稱如果不指定數(shù)據庫,database_name 默認為當前數(shù)據庫當前連接的登錄必須在 database_name 所指定的數(shù)據庫中有關聯(lián)的現(xiàn)有用戶 ID腋么,而該用戶 ID 必須具有創(chuàng)建表的權限
owner
是新表所有者的用戶 ID 名褪子,owner 必須是 database_name 所指定的數(shù)據庫中的現(xiàn)有用戶 ID蕾盯,owner 默認為與 database_name 所指定的數(shù)據庫中的當前連接相關聯(lián)的用戶 ID如果 CREATE TABLE 語句由 sysadmin 固定服務器角色成員或 database_name 所指定的數(shù)據庫中的 db_dbowner 或 db_ddladmin 固定數(shù)據庫角色成員執(zhí)行蛀骇,則 owner 可以指定與當前連接的登錄相關聯(lián)的用戶 ID 以外的其它用戶 ID如果與執(zhí)行 CREATE TABLE 語句的登錄相關聯(lián)的用戶 ID 僅具有創(chuàng)建表的權限,則 owner 必須指定與當前登錄相關聯(lián)的用戶 IDsysadmin 固定服務器角色成員或別名為 dbo 用戶的登錄與用戶 ID dbo 相關聯(lián)镐躲;因此骆捧,由這些用戶創(chuàng)建的表的默認所有者為 dbo不是由上述兩種角色的登錄創(chuàng)建的表所有者默認為與該登錄相關聯(lián)的用戶 ID
table_name
是新表的名稱表名必須符合標識符規(guī)則數(shù)據庫中的 owner.table_name 組合必須唯一table_name 最多可包含 128 個字符,但本地臨時表的表名(名稱前有一個編號符 #)最多只能包含 116 個字符
column_name
是表中的列名列名必須符合標識符規(guī)則,并且在表內唯一以 timestamp 數(shù)據類型創(chuàng)建的列可以省略 column_name如果不指定 column_name锅锨,timestamp 列的名稱默認為 timestamp
computed_column_expression
是定義計算列值的表達式計算列是物理上并不存儲在表中的虛擬列計算列由同一表中的其它列通過表達式計算得到例如叽赊,計算列可以這樣定義:cost AS price * qty表達式可以是非計算列的列名、常量必搞、函數(shù)必指、變量,也可以是用一個或多個運算符連接的上述元素的任意組合表達式不能為子查詢
計算列可用于選擇列表恕洲、WHERE 子句塔橡、ORDER BY 子句或任何其它可使用常規(guī)表達式的位置,但下列情況除外:
計算列不能用作 DEFAULT 或 FOREIGN KEY 約束定義霜第,也不能與 NOT NULL 約束定義一起使用但是葛家,如果計算列由具有確定性的表達式定義,并且索引列中允許計算結果的數(shù)據類型泌类,則可將該列用作索引中的鍵列癞谒,或用作 PRIMARY KEY 或 UNIQUE 約束的一部分
例如,如果表中含有整型列 a 和 b刃榨,則可以在計算列 a+b 上創(chuàng)建索引但不能在計算列 a+DATEPART(dd, GETDATE()) 上創(chuàng)建索引弹砚,因為在以后的調用中,其值可能發(fā)生改變
計算列不能作為 INSERT 或 UPDATE 語句的目標
說明?? 表中計算列所使用的列值因行而異枢希,因此每行的計算列值可能不同
計算列的為空性是由 SQL Server 根據使用的表達式自動確定的即使只有不可為空的列桌吃,大多數(shù)表達式的結果也認為是可為空的,因為可能的下溢或溢出也將生成 NULL 結果使用 COLUMNPROPERTY 函數(shù)(AllowsNull 屬性)查看表中任何計算列的為空性通過指定 ISNULL(check_expression, constant)晴玖,其中常量為替代任何 NULL 結果的非 NULL 值读存,可為空的表達式 expr 可以轉換為不可為空的表達式
ON {filegroup | DEFAULT}
指定存儲表的文件組數(shù)據庫中必須存在該文件組如果指定 DEFAULT,或者根本未指定 ON 參數(shù)呕屎,則表存儲在默認文件組中
ON {filegroup | DEFAULT} 也可以在 PRIMARY KEY 約束或 UNIQUE 約束中指定這些約束會創(chuàng)建索引如果指定 filegroup让簿,則索引將存儲在指定的文件組中如果指定 DEFAULT,則索引將存儲在默認文件組中如果約束中沒有指定文件組秀睛,則索引將與表存儲在同一文件組中如果 PRIMARY KEY 約束或 UNIQUE 約束創(chuàng)建聚集索引尔当,則表的數(shù)據頁將與索引存儲在同一文件組中
說明?? 在 ON {filegroup | DEFAULT} 和 TEXTIMAGE_ON {filegroup | DEFAULT} 的上下文中,DEFAULT 并不是關鍵字DEFAULT 是默認文件組的標識符并需對其進行定界蹂安,如 ON /”DEFAULT/”椭迎、ON [DEFAULT] 和 TEXTIMAGE_ON /”DEFAULT/” 或 TEXTIMAGE_ON [DEFAULT]
TEXTIMAGE_ON
是表示 text、ntext 和 image 列存儲在指定文件組中的關鍵字如果表中沒有 text田盈、ntext 或 image 列畜号,則不能使用 TEXTIMAGE ON如果沒有指定 TEXTIMAGE_ON,則 text允瞧、ntext 和 image 列將與表存儲在同一文件組中
data_type
指定列的數(shù)據類型可以是系統(tǒng)數(shù)據類型或用戶定義數(shù)據類型用戶定義數(shù)據類型必須先用 sp_addtype 創(chuàng)建简软,然后才能在表定義中使用
在 CREATE TABLE 語句中蛮拔,用戶定義數(shù)據類型的 NULL/NOT NULL 賦值可被替代但長度標準不能更改;不能在 CREATE TABLE 語句中指定用戶定義數(shù)據類型的長度
DEFAULT
如果在插入過程中未顯式提供值痹升,則指定為列提供的值DEFAULT 定義可適用于除定義為 timestamp 或帶 IDENTITY 屬性的列以外的任何列除去表時建炫,將刪除 DEFAULT 定義只有常量值(如字符串)、系統(tǒng)函數(shù)(如 SYSTEM_USER())或 NULL 可用作默認值為保持與 SQL Server 早期版本的兼容疼蛾,可以給 DEFAULT 指派約束名
constant_expression
是用作列的默認值的常量肛跌、NULL 或系統(tǒng)函數(shù)
IDENTITY
表示新列是標識列當向表中添加新行時,Microsoft? SQL Server? 將為該標識列提供一個唯一的察郁、遞增的值標識列通常與 PRIMARY KEY 約束一起用作表的唯一行標識符可以將 IDENTITY 屬性指派給 tinyint衍慎、smallint、int绳锅、bigint西饵、decimal(p,0) 或 numeric(p,0) 列對于每個表只能創(chuàng)建一個標識列不能對標識列使用綁定默認值和 DEFAULT 約束必須同時指定種子和增量,或者二者都不指定如果二者都未指定鳞芙,則取默認值 (1,1)
seed
是裝入表的第一行所使用的值
increment
是添加到前一行的標識值的增量值
NOT FOR REPLICATION
表示當復制登錄(如 sqlrepl)向表中插入數(shù)據時,不強制 IDENTITY 屬性復制的行必須保留發(fā)布數(shù)據庫中所賦予的鍵值期虾;NOT FOR REPLICATION 子句確保不向復制進程所插入的行賦予新的標識值其它登錄所插入的行仍然具有以通常的方式創(chuàng)建的新標識值建議同時使用具有 NOT FOR REPLICATION 的 CHECK 約束原朝,以確保賦予的標識值處于當前數(shù)據庫所需的范圍內
ROWGUIDCOL
表示新列是行的全局唯一標識符列對于每個表只能指派一個 uniqueidentifier 列作為 ROWGUIDCOL 列ROWGUIDCOL 屬性只能指派給 uniqueidentifier 列如果數(shù)據庫兼容級別小于或等于 65,則 ROWGUIDCOL 關鍵字無效有關更多信息镶苞,請參見 sp_dbcmptlevel
ROWGUIDCOL 屬性并不強制列中所存儲值的唯一性該屬性也不會為插入到表中的新行自動生成值若要為每列生成唯一值喳坠,那么或者在 INSERT 語句中使用 NEWID 函數(shù),或者將 NEWID 函數(shù)指定為該列的默認值
collation_name
指定列的排序規(guī)則排序規(guī)則名稱既可以是 Windows 排序規(guī)則名稱茂蚓,也可以是 SQL 排序規(guī)則名稱collation_name 僅適用于數(shù)據類型為 char壕鹉、varchar、text聋涨、nchar晾浴、nvarchar 及 ntext 的列如果沒有指定該參數(shù),那么如果列的數(shù)據類型是用戶定義的牍白,則該列的排序規(guī)則就是用戶定義數(shù)據類型的排序規(guī)則脊凰,否則就是數(shù)據庫的默認排序規(guī)則
有關 Windows 和 SQL 排序規(guī)則名稱的更多信息,請參見 COLLATE
CONSTRAINT
是可選關鍵字茂腥,表示 PRIMARY KEY狸涌、NOT NULL、UNIQUE最岗、FOREIGN KEY 或 CHECK 約束定義的開始約束是特殊屬性帕胆,用于強制數(shù)據完整性并可以為表及其列創(chuàng)建索引
constrain_name
是約束的名稱約束名在數(shù)據庫內必須是唯一的
NULL | NOT NULL
是確定列中是否允許空值的關鍵字從嚴格意義上講,NULL 不是約束般渡,但可以使用與指定 NOT NULL 同樣的方法指定
PRIMARY KEY
是通過唯一索引對給定的一列或多列強制實體完整性的約束對于每個表只能創(chuàng)建一個 PRIMARY KEY 約束
UNIQUE
是通過唯一索引為給定的一列或多列提供實體完整性的約束一個表可以有多個 UNIQUE 約束
CLUSTERED | NONCLUSTERED
是表示為 PRIMARY KEY 或 UNIQUE 約束創(chuàng)建聚集或非聚集索引的關鍵字PRIMARY KEY 約束默認為 CLUSTERED懒豹,UNIQUE 約束默認為 NONCLUSTERED
在 CREATE TABLE 語句中只能為一個約束指定 CLUSTERED如果在為 UNIQUE 約束指定 CLUSTERED 的同時又指定了 PRIMARY KEY 約束右蹦,則 PRIMARY KEY 將默認為 NONCLUSTERED
[ WITH FILLFACTOR = fillfactor ]
指定 SQL Server 存儲索引數(shù)據時每個索引頁的充滿程度用戶指定的 fillfactor 取值范圍從 1 到 100如果沒有指定 fillfactor,則默認為 0創(chuàng)建索引時歼捐,fillfactor 的值越低何陆,不必分配新空間即可由新索引項使用的空間就越多
FOREIGN KEY…REFERENCES
是為列中的數(shù)據提供引用完整性的約束FOREIGN KEY 約束要求列中的每個值在被引用表中對應的被引用列中都存在FOREIGN KEY 約束只能引用被引用表中為 PRIMARY KEY 或 UNIQUE 約束的列或被引用表中在 UNIQUE INDEX 內引用的列
ref_table
是 FOREIGN KEY 約束所引用的表名
(ref_column[,...n])
是 FOREIGN KEY 約束所引用的表中的一列或多列
ON DELETE {CASCADE | NO ACTION}
指定當要創(chuàng)建的表中的行具有引用關系,并且從父表中刪除該行所引用的行時豹储,要對該行采取的操作默認設置為 NO ACTION
如果指定 CASCADE贷盲,則從父表中刪除被引用行時,也將從引用表中刪除引用行如果指定 NO ACTION剥扣,SQL Server 將產生一個錯誤并回滾父表中的行刪除操作
例如巩剖,在 Northwind 數(shù)據庫中,Orders 表和 Customers 表之間有引用關系Orders.CustomerID 外鍵引用 Customers.CustomerID 主鍵
如果對 Customers 表的某行執(zhí)行 DELETE 語句钠怯,并且為 Orders.CustomerID 指定 ON DELETE CASCADE 操作佳魔,則 SQL Server 將在 Orders 表中檢查是否有與被刪除的行相關的一行或多行如果存在相關行,則 Orders 表中的相關行將隨 Customers 表中的被引用行一同刪除
反之晦炊,如果指定 NO ACTION鞠鲜,若在 Orders 表中至少有一行引用 Customers 表中要刪除的行,則 SQL Server 將產生一個錯誤并回滾 Customers 表中的刪除操作
ON UPDATE {CASCADE | NO ACTION}
指定當要創(chuàng)建的表中的行具有引用關系断国,并且在父表中更新該行所引用的行時贤姆,要對該行采取的操作默認設置為 NO ACTION
如果指定 CASCADE,則在父表中更新被引用行時稳衬,也將在引用表中更新引用行如果指定 NO ACTION霞捡,SQL Server 將產生一個錯誤并回滾父表中的行更新操作
例如,在 Northwind 數(shù)據庫中薄疚,Orders 表和 Customers 表之間有引用關系:Orders.CustomerID 外鍵引用 Customers.CustomerID 主鍵
如果對 Customers 表的某行執(zhí)行 UPDATE 語句碧信,并且為 Orders.CustomerID 指定 ON UPDATE CASCADE 操作,則 SQL Server 將在 Orders 表中檢查是否有與被更新行相關的一行或多行如果存在相關行街夭,則 Orders 表中的相關行將隨 Customers 表中的被引用行一同更新
反之砰碴,如果指定 NO ACTION,若在 Orders 表中至少有一行引用 Customers 行莱坎,則 SQL Server 將產生一個錯誤并回滾對 Customers 行的更新操作
CHECK
是通過限制可輸入到一列或多列中的可能值強制域完整性的約束
NOT FOR REPLICATION
是用于防止在復制所使用的分發(fā)過程中強制 CHECK 約束的關鍵字當表是復制發(fā)布的訂戶時衣式,請不要直接更新訂閱表,而要更新發(fā)布表檐什,然后讓復制進程將數(shù)據分發(fā)回訂閱表可以在訂閱表上定義 CHECK 約束碴卧,以防用戶修改訂閱表但是如果不使用 NOT FOR REPLICATION 子句,CHECK 約束同樣會防止復制進程將修改從發(fā)布表分發(fā)給訂閱表NOT FOR REPLICATION 子句表示對用戶的修改(而不是對復制進程)強加約束
NOT FOR REPLICATION CHECK 約束適用于被更新記錄的前像和后像乃正,以防在復制范圍中添加記錄或從復制范圍中刪除記錄將檢查所有刪除和插入操作住册;如果操作在復制范圍內,則拒絕執(zhí)行該操作
如果對標識符列使用此約束瓮具,則當復制用戶更新標識列時荧飞,SQL Server 將允許不必重新計算表標識列的種子值
logical_expression
是返回 TRUE 或 FALSE 的邏輯表達式
column
是用括號括起來的一列或多列凡人,在表約束中表示這些列用在約束定義中
[ASC | DESC]
指定加入到表約束中的一列或多列的排序次序默認設置為 ASC
n
是表示前面的項可重復 n 次的占位符