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 所指定的数据库中的现有用户 ID,owner 默认为与 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
是新表的名称表名必须符合标识符规则数据库中的 owner.table_name 组合必须唯一table_name 最多可包含 128 个字符,但本地临时表的表名(名称前有一个编号符 #)最多只能包含 116 个字符
column_name
是表中的列名列名必须符合标识符规则,并且在表内唯一以 timestamp 数据类型创建的列可以省略 column_name如果不指定 column_name,timestamp 列的名称默认为 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}
指定存储表的文件组数据库中必须存在该文件组如果指定 DEFAULT,或者根本未指定 ON 参数,则表存储在默认文件组中
ON {filegroup | DEFAULT} 也可以在 PRIMARY KEY 约束或 UNIQUE 约束中指定这些约束会创建索引如果指定 filegroup,则索引将存储在指定的文件组中如果指定 DEFAULT,则索引将存储在默认文件组中如果约束中没有指定文件组,则索引将与表存储在同一文件组中如果 PRIMARY KEY 约束或 UNIQUE 约束创建聚集索引,则表的数据页将与索引存储在同一文件组中
说明 在 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
指定列的数据类型可以是系统数据类型或用户定义数据类型用户定义数据类型必须先用 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 属性指派给 tinyint、smallint、int、bigint、decimal(p,0) 或 numeric(p,0) 列对于每个表只能创建一个标识列不能对标识列使用绑定默认值和 DEFAULT 约束必须同时指定种子和增量,或者二者都不指定如果二者都未指定,则取默认值 (1,1)
seed
是装入表的第一行所使用的值
increment
是添加到前一行的标识值的增量值
NOT FOR REPLICATION
表示当复制登录(如 sqlrepl)向表中插入数据时,不强制 IDENTITY 属性复制的行必须保留发布数据库中所赋予的键值;NOT FOR REPLICATION 子句确保不向复制进程所插入的行赋予新的标识值其它登录所插入的行仍然具有以通常的方式创建的新标识值建议同时使用具有 NOT FOR REPLICATION 的 CHECK 约束,以确保赋予的标识值处于当前数据库所需的范围内
ROWGUIDCOL
表示新列是行的全局唯一标识符列对于每个表只能指派一个 uniqueidentifier 列作为 ROWGUIDCOL 列ROWGUIDCOL 属性只能指派给 uniqueidentifier 列如果数据库兼容级别小于或等于 65,则 ROWGUIDCOL 关键字无效有关更多信息,请参见 sp_dbcmptlevel
ROWGUIDCOL 属性并不强制列中所存储值的唯一性该属性也不会为插入到表中的新行自动生成值若要为每列生成唯一值,那么或者在 INSERT 语句中使用 NEWID 函数,或者将 NEWID 函数指定为该列的默认值
collation_name
指定列的排序规则排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称collation_name 仅适用于数据类
关键词标签:SQL
相关阅读
热门文章 Oracle中使用alter table来增加,删除,修改列oracle中使用SQL语句修改字段类型-oracle修使用低权限Oracle数据库账户得到管理员权限Oracle对user的访问控制
人气排行 ORACLE SQL 判断字符串是否为数字的语句Oracle中使用alter table来增加,删除,修改列的语法ORACLE和SQL语法区别归纳(1)oracle grant 授权语句如何加速Oracle大批量数据处理Oracle删除表的几种方法ORACLE修改IP地址后如何能够使用Oracle 10g创建表空间和用户并指定权限
查看所有0条评论>>