熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

CREATE TABLE

2022-06-13   來源: Windows系統管理 

  創建新表
  
  語法
  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 )
  }
  
  參數
  database_name
  
  是要在其中創建表的數據庫名稱database_name 必須是現有數據庫的名稱如果不指定數據庫database_name 默認為當前數據庫當前連接的登錄必須在 database_name 所指定的數據庫中有關聯的現有用戶 ID而該用戶 ID 必須具有創建表的權限
  
  owner
  
  是新表所有者的用戶 ID 名owner 必須是 database_name 所指定的數據庫中的現有用戶 IDowner 默認為與 database_name 所指定的數據庫中的當前連接相關聯的用戶 ID如果 CREATE TABLE 語句由 sysadmin 固定服務器角色成員或 database_name 所指定的數據庫中的 db_dbowner 或 db_ddladmin 固定數據庫角色成員執行則 owner 可以指定與當前連接的登錄相關聯的用戶 ID 以外的其它用戶 ID如果與執行 CREATE TABLE 語句的登錄相關聯的用戶 ID 僅具有創建表的權限則 owner 必須指定與當前登錄相關聯的用戶 IDsysadmin 固定服務器角色成員或別名為 dbo 用戶的登錄與用戶 ID dbo 相關聯因此由這些用戶創建的表的默認所有者為 dbo不是由上述兩種角色的登錄創建的表所有者默認為與該登錄相關聯的用戶 ID
  
  table_name
  
  是新表的名稱表名必須符合標識符規則數據庫中的 ownertable_name 組合必須唯一table_name 最多可包含 個字符但本地臨時表的表名(名稱前有一個編號符 #)最多只能包含 個字符
  
  column_name
  
  是表中的列名列名必須符合標識符規則並且在表內唯一以 timestamp 數據類型創建的列可以省略 column_name如果不指定 column_nametimestamp 列的名稱默認為 timestamp
  
  computed_column_expression
  
  是定義計算列值的表達式計算列是物理上並不存儲在表中的虛擬列計算列由同一表中的其它列通過表達式計算得到例如計算列可以這樣定義cost AS price * qty表達式可以是非計算列的列名常量函數變量也可以是用一個或多個運算符連接的上述元素的任意組合表達式不能為子查詢
  
  計算列可用於選擇列表WHERE 子句ORDER BY 子句或任何其它可使用常規表達式的位置但下列情況除外
  
  計算列不能用作 DEFAULT 或 FOREIGN KEY 約束定義也不能與 NOT NULL 約束定義一起使用但是如果計算列由具有確定性的表達式定義並且索引列中允許計算結果的數據類型則可將該列用作索引中的鍵列或用作 PRIMARY KEY 或 UNIQUE 約束的一部分
  例如如果表中含有整型列 a 和 b則可以在計算列 a+b 上創建索引但不能在計算列 a+DATEPART(dd GETDATE()) 上創建索引因為在以後的調用中其值可能發生改變
  
  計算列不能作為 INSERT 或 UPDATE 語句的目標
  
  
  說明 表中計算列所使用的列值因行而異因此每行的計算列值可能不同
  
  計算列的為空性是由 SQL Server 根據使用的表達式自動確定的即使只有不可為空的列大多數表達式的結果也認為是可為空的因為可能的下溢或溢出也將生成 NULL 結果使用 COLUMNPROPERTY 函數(AllowsNull 屬性)查看表中任何計算列的為空性通過指定 ISNULL(check_expression constant)其中常量為替代任何 NULL 結果的非 NULL 值可為空的表達式 expr 可以轉換為不可為空的表達式
  
  ON {filegroup | DEFAULT}
  
  指定存儲表的文件組如果指定 filegroup則表將存儲在指定的文件組中數據庫中必須存在該文件組如果指定 DEFAULT或者根本未指定 ON 參數則表存儲在默認文件組中
  
  ON {filegroup | DEFAULT} 也可以在 PRIMARY KEY 約束或 UNIQUE 約束中指定這些約束會創建索引如果指定 filegroup則索引將存儲在指定的文件組中如果指定 DEFAULT則索引將存儲在默認文件組中如果約束中沒有指定文件組則索引將與表存儲在同一文件組中如果 PRIMARY KEY 約束或 UNIQUE 約束創建聚集索引則表的數據頁將與索引存儲在同一文件組中
  
  
  
  說明 在 ON {filegroup | DEFAULT} 和 TEXTIMAGE_ON {filegroup | DEFAULT} 的上下文中DEFAULT 並不是關鍵字DEFAULT 是默認文件組的標識符並需對其進行定界如 ON DEFAULTON [DEFAULT] 和 TEXTIMAGE_ON DEFAULT 或 TEXTIMAGE_ON [DEFAULT]
  
  
  TEXTIMAGE_ON
  
  是表示 textntext 和 image 列存儲在指定文件組中的關鍵字如果表中沒有 textntext 或 image 列則不能使用 TEXTIMAGE ON如果沒有指定 TEXTIMAGE_ON則 textntext 和 image 列將與表存儲在同一文件組中
  
  data_type
  
  指定列的數據類型可以是系統數據類型或用戶定義數據類型用戶定義數據類型必須先用 sp_addtype 創建然後才能在表定義中使用
  
  在 CREATE TABLE 語句中用戶定義數據類型的 NULL/NOT NULL 賦值可被替代但長度標准不能更改不能在 CREATE TABLE 語句中指定用戶定義數據類型的長度
  
  DEFAULT
  
  如果在插入過程中未顯式提供值則指定為列提供的值DEFAULT 定義可適用於除定義為 timestamp 或帶 IDENTITY 屬性的列以外的任何列除去表時將刪除 DEFAULT 定義只有常量值(如字符串)系統函數(如 SYSTEM_USER())或 NULL 可用作默認值為保持與 SQL Server 早期版本的兼容可以給 DEFAULT 指派約束名
  
  constant_expression
  
  是用作列的默認值的常量NULL 或系統函數
  
  IDENTITY
  
  表示新列是標識列當向表中添加新行時Microsoft® SQL Server&#; 將為該標識列提供一個唯一的遞增的值標識列通常與 PRIMARY KEY 約束一起用作表的唯一行標識符可以將 IDENTITY 屬性指派給 tinyintsmallintintbigintdecimal(p) 或 numeric(p) 列對於每個表只能創建一個標識列不能對標識列使用綁定默認值和 DEFAULT 約束必須同時指定種子和增量或者二者都不指定如果二者都未指定則取默認值 ()
  
  seed
  
  是裝入表的第一行所使用的值
  
  increment
  
  是添加到前一行的標識值的增量值
  
  NOT FOR REPLICATION
  
  表示當復制登錄(如 sqlrepl)向表中插入數據時不強制 IDENTITY 屬性復制的行必須保留發布數據庫中所賦予的鍵值NOT FOR REPLICATION 子句確保不向復制進程所插入的行賦予新的標識值其它登錄所插入的行仍然具有以通常的方式創建的新標識值建議同時使用具有 NOT FOR REPLICATION 的 CHECK 約束以確保賦予的標識值處於當前數據庫所需的范圍內
  
  ROWGUIDCOL
  
  表示新列是行的全局唯一標識符列對於每個表只能指派一個 uniqueidentifier 列作為 ROWGUIDCOL 列ROWGUIDCOL 屬性只能指派給 uniqueidentifier 列如果數據庫兼容級別小於或等於 則 ROWGUIDCOL 關鍵字無效
  RO
From:http://tw.wingwit.com/Article/os/xtgl/201311/9284.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.