电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

CREATE TABLE


发布日期:2019/12/18
 

创建新表

语法

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

上一篇:Windows7新功能深入体验

下一篇:修改和重命名触发器