CreateTable语法Word格式文档下载.docx

上传人:b****5 文档编号:16230936 上传时间:2022-11-21 格式:DOCX 页数:18 大小:27.16KB
下载 相关 举报
CreateTable语法Word格式文档下载.docx_第1页
第1页 / 共18页
CreateTable语法Word格式文档下载.docx_第2页
第2页 / 共18页
CreateTable语法Word格式文档下载.docx_第3页
第3页 / 共18页
CreateTable语法Word格式文档下载.docx_第4页
第4页 / 共18页
CreateTable语法Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

CreateTable语法Word格式文档下载.docx

《CreateTable语法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《CreateTable语法Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

CreateTable语法Word格式文档下载.docx

][...n]

=[CONSTRAINTconstraint_name]

{[NULL|NOTNULL] 

|[{PRIMARYKEY|UNIQUE}

[CLUSTERED|NONCLUSTERED]

[WITHFILLFACTOR=fillfactor]

[ON{filegroup|DEFAULT}]] 

|[[FOREIGNKEY]REFERENCESref_table

[(ref_column)]

[ONDELETE{CASCADE|NOACTION}]

[ONUPDATE{CASCADE|NOACTION}]

[NOTFORREPLICATION] 

|CHECK[NOTFORREPLICATION](logical_expression) 

}

{[{PRIMARYKEY|UNIQUE} 

{(column[ASC|DESC][,...n])}

[WITHFILLFACTOR=fillfactor] 

[ON{filegroup|DEFAULT}] 

|FOREIGNKEY

[(column[,...n])] 

REFERENCESref_table

[(ref_column[,...n])]

|CHECK[NOTFORREPLICATION]

(search_conditions)

参数

database_name

是要在其中创建表的数据库名称。

database_name必须是现有数据库的名称。

如果不指定数据库,database_name默认为当前数据库。

当前连接的登录必须在database_name所指定的数据库中有关联的现有用户ID,而该用户ID必须具有创建表的权限。

owner

是新表所有者的用户ID名,owner必须是database_name所指定的数据库中的现有用户ID,owner默认为与database_name所指定的数据库中的当前连接相关联的用户ID。

如果CREATETABLE语句由sysadmin固定服务器角色成员或database_name所指定的数据库中的db_dbowner或db_ddladmin固定数据库角色成员执行,则owner可以指定与当前连接的登录相关联的用户ID以外的其它用户ID。

如果与执行CREATETABLE语句的登录相关联的用户ID仅具有创建表的权限,则owner必须指定与当前登录相关联的用户ID。

sysadmin固定服务器角色成员或别名为dbo用户的登录与用户IDdbo相关联;

因此,由这些用户创建的表的默认所有者为dbo。

不是由上述两种角色的登录创建的表所有者默认为与该登录相关联的用户ID。

table_name

是新表的名称。

表名必须符合标识符规则。

数据库中的owner.table_name组合必须唯一。

table_name最多可包含128个字符,但本地临时表的表名(名称前有一个编号符#)最多只能包含116个字符。

column_name

是表中的列名。

列名必须符合标识符规则,并且在表内唯一。

以timestamp数据类型创建的列可以省略column_name。

如果不指定column_name,timestamp列的名称默认为timestamp。

computed_column_expression

是定义计算列值的表达式。

计算列是物理上并不存储在表中的虚拟列。

计算列由同一表中的其它列通过表达式计算得到。

例如,计算列可以这样定义:

costASprice*qty。

表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合。

表达式不能为子查询。

计算列可用于选择列表、WHERE子句、ORDERBY子句或任何其它可使用常规表达式的位置,但下列情况除外:

∙计算列不能用作DEFAULT或FOREIGNKEY约束定义,也不能与NOTNULL约束定义一起使用。

但是,如果计算列由具有确定性的表达式定义,并且索引列中允许计算结果的数据类型,则可将该列用作索引中的键列,或用作PRIMARYKEY或UNIQUE约束的一部分。

例如,如果表中含有整型列a和b,则可以在计算列a+b上创建索引。

但不能在计算列a+DATEPART(dd,GETDATE())上创建索引,因为在以后的调用中,其值可能发生改变。

∙计算列不能作为INSERT或UPDATE语句的目标。

说明 

表中计算列所使用的列值因行而异,因此每行的计算列值可能不同。

计算列的为空性是由SQLServer根据使用的表达式自动确定的。

即使只有不可为空的列,大多数表达式的结果也认为是可为空的,因为可能的下溢或溢出也将生成NULL结果。

使用COLUMNPROPERTY函数(AllowsNull属性)查看表中任何计算列的为空性。

通过指定ISNULL(check_expression,constant),其中常量为替代任何NULL结果的非NULL值,可为空的表达式expr可以转换为不可为空的表达式。

ON{filegroup|DEFAULT}

指定存储表的文件组。

如果指定filegroup,则表将存储在指定的文件组中。

数据库中必须存在该文件组。

如果指定DEFAULT,或者根本未指定ON参数,则表存储在默认文件组中。

ON{filegroup|DEFAULT}也可以在PRIMARYKEY约束或UNIQUE约束中指定。

这些约束会创建索引。

如果指定filegroup,则索引将存储在指定的文件组中。

如果指定DEFAULT,则索引将存储在默认文件组中。

如果约束中没有指定文件组,则索引将与表存储在同一文件组中。

如果PRIMARYKEY约束或UNIQUE约束创建聚集索引,则表的数据页将与索引存储在同一文件组中。

在ON{filegroup|DEFAULT}和TEXTIMAGE_ON{filegroup|DEFAULT}的上下文中,DEFAULT并不是关键字。

DEFAULT是默认文件组的标识符并需对其进行定界,如ON"

DEFAULT"

、ON[DEFAULT]和TEXTIMAGE_ON"

或TEXTIMAGE_ON[DEFAULT]。

TEXTIMAGE_ON

是表示text、ntext和image列存储在指定文件组中的关键字。

如果表中没有text、ntext或image列,则不能使用TEXTIMAGEON。

如果没有指定TEXTIMAGE_ON,则text、ntext和image列将与表存储在同一文件组中。

data_type

指定列的数据类型。

可以是系统数据类型或用户定义数据类型。

用户定义数据类型必须先用sp_addtype创建,然后才能在表定义中使用。

在CREATETABLE语句中,用户定义数据类型的NULL/NOTNULL赋值可被替代。

但长度标准不能更改;

不能在CREATETABLE语句中指定用户定义数据类型的长度。

DEFAULT

如果在插入过程中未显式提供值,则指定为列提供的值。

DEFAULT定义可适用于除定义为timestamp或带IDENTITY属性的列以外的任何列。

除去表时,将删除DEFAULT定义。

只有常量值(如字符串)、系统函数(如SYSTEM_USER())或NULL可用作默认值。

为保持与SQLServer早期版本的兼容,可以给DEFAULT指派约束名。

constant_expression

是用作列的默认值的常量、NULL或系统函数。

IDENTITY

表示新列是标识列。

当向表中添加新行时,Microsoft®

SQLServer™将为该标识列提供一个唯一的、递增的值。

标识列通常与PRIMARYKEY约束一起用作表的唯一行标识符。

可以将IDENTITY属性指派给tinyint、smallint、int、bigint、decimal(p,0)或numeric(p,0)列。

对于每个表只能创建一个标识列。

不能对标识列使用绑定默认值和DEFAULT约束。

必须同时指定种子和增量,或者二者都不指定。

如果二者都未指定,则取默认值(1,1)。

seed

是装入表的第一行所使用的值。

increment

是添加到前一行的标识值的增量值。

NOTFORREPLICATION

表示当复制登录(如sqlrepl)向表中插入数据时,不强制IDENTITY属性。

复制的行必须保留发布数据库中所赋予的键值;

NOTFORREPLICATION子句确保不向复制进程所插入的行赋予新的标识值。

其它登录所插入的行仍然具有以通常的方式创建的新标识值。

建议同时使用具有NOTFORREPLICATION的CHECK约束,以确保赋予的标识值处于当前数据库所需的范围内。

ROWGUIDCOL

表示新列是行的全局唯一标识符列。

对于每个表只能指派一个uniqueidentifier列作为ROWGUIDCOL列。

ROWGUIDCOL属性只能指派给uniqueidentifier列。

如果数据库兼容级别小于或等于65,则ROWGUIDCOL关键字无效。

ROWGUIDCOL属性并不强制列中所存储值的唯一性。

该属性也不会为插入到表中的新行自动生成值。

若要为每列生成唯一值,那么或者在INSERT语句中使用NEWID函数,或者将NEWID函数指定为该列的默认值。

collation_name

指定列的排序规则。

排序规则名称既可以是Windows排序规则名称,也可以是SQL排序规则名称。

collation_name仅适用于数据类型为char、varchar、text、nchar、nvarchar及ntext的列。

如果没有指定该参数,那么如果列的数据类型是用户定义的,则该列的排序规则就是用户定义数据类型的排序规则,否则就是数据库的默认排序规则。

有关Windows和SQL排序规则名称的更多信息,请参见COLLATE。

CONSTRAINT

是可选关键字,表示PRIMARYKEY、NOTNULL、UNIQUE、FOREIGNKEY或CHECK约束定义的开始。

约束是特殊属性,用于强制数据完整性并可以为表及其列创建索引。

constrain_name

是约束的名称。

约束名在数据库内必须是唯一的。

NULL|NOTNULL

是确定列中是否允许空值的关键字。

从严格意义上讲,NULL不是约束,但可以使用与指定NOTNULL同样的方法指定。

PRIMARYKEY

是通过唯一索引对给定的一列或多列强制实体完整性的约束。

对于每个表只能创建一个PRIMARYKEY约束。

UNIQUE

是通过唯一索引为给定的一列或多列提供实体完整性的约束。

一个表可以有多个UNIQUE约束。

CLUSTERED|NONCLUSTERED

是表示为PRIMARYKEY或UNIQUE约束创建聚集或非聚集索引的关键字。

PRIMARYKEY约束默认为CLUSTERED,UNIQUE约束默认为NONCLUSTERED。

在CREATETABLE语句中只能为一个约束指定CLUSTERED。

如果在为UNIQUE约束指定CLUSTERED的同时又指定了PRIMARYKEY约束,则PRIMARYKEY将默认为NONCLUSTERED。

指定SQLServer存储索引数据时每个索引页的充满程度。

用户指定的fillfactor取值范围从1到100。

如果没有指定fillfactor,则默认为0。

创建索引时,fillfactor的值越低,不必分配新空间即可由新索引项使用的空间就越多。

FOREIGNKEY...REFERENCES

是为列中的数据提供引用完整性的约束。

FOREIGNKEY约束要求列中的每个值在被引用表中对应的被引用列中都存在。

FOREIGNKEY约束只能引用被引用表中为PRIMARYKEY或UNIQUE约束的列或被引用表中在UNIQUEINDEX内引用的列。

ref_table

是FOREIGNKEY约束所引用的表名。

(ref_column[,...n])

是FOREIGNKEY约束所引用的表中的一列或多列。

ONDELETE{CASCADE|NOACTION}

指定当要创建的表中的行具有引用关系,并且从父表中删除该行所引用的行时,要对该行采取的操作。

默认设置为NOACTION。

如果指定CASCADE,则从父表中删除被引用行时,也将从引用表中删除引用行。

如果指定NOACTION,SQLServer将产生一个错误并回滚父表中的行删除操作。

例如,在Northwind数据库中,Orders表和Customers表之间有引用关系。

Orders.CustomerID外键引用Customers.CustomerID主键。

如果对Customers表的某行执行DELETE语句,并且为Orders.CustomerID指定ONDELETECASCADE操作,则SQLServer将在Orders表中检查是否有与被删除的行相关的一行或多行。

如果存在相关行,则Orders表中的相关行将随Customers表中的被引用行一同删除。

反之,如果指定NOACTION,若在Orders表中至少有一行引用Customers表中要删除的行,则SQLServer将产生一个错误并回滚Customers表中的删除操作。

ONUPDATE{CASCADE|NOACTION}

指定当要创建的表中的行具有引用关系,并且在父表中更新该行所引用的行时,要对该行采取的操作。

如果指定CASCADE,则在父表中更新被引用行时,也将在引用表中更新引用行。

如果指定NOACTION,SQLServer将产生一个错误并回滚父表中的行更新操作。

例如,在Northwind数据库中,Orders表和Customers表之间有引用关系:

如果对Customers表的某行执行UPDATE语句,并且为Orders.CustomerID指定ONUPDATECASCADE操作,则SQLServer将在Orders表中检查是否有与被更新行相关的一行或多行。

如果存在相关行,则

Orders表中的相关行将随Customers表中的被引用行一同更新。

反之,如果指定NOACTION,若在Orders表中至少有一行引用Customers行,则SQLServer将产生一个错误并回滚对Customers行的更新操作。

CHECK

是通过限制可输入到一列或多列中的可能值强制域完整性的约束。

是用于防止在复制所使用的分发过程中强制CHECK约束的关键字。

当表是复制发布的订户时,请不要直接更新订阅表,而要更新发布表,然后让复制进程将数据分发回订阅表。

可以在订阅表上定义CHECK约束,以防用户修改订阅表。

但是如果不使用NOTFORREPLICATION子句,CHECK约束同样会防止复制进程将修改从发布表分发给订阅表。

NOTFORREPLICATION子句表示对用户的修改(而不是对复制进程)强加约束。

NOTFORREPLICATIONCHECK约束适用于被更新记录的前像和后像,以防在复制范围中添加记录或从复制范围中删除记录。

将检查所有删除和插入操作;

如果操作在复制范围内,则拒绝执行该操作。

如果对标识符列使用此约束,则当复制用户更新标识列时,SQLServer将允许不必重新计算表标识列的种子值。

logical_expression

是返回TRUE或FALSE的逻辑表达式。

column

是用括号括起来的一列或多列,在表约束中表示这些列用在约束定义中。

[ASC|DESC]

指定加入到表约束中的一列或多列的排序次序。

默认设置为ASC。

n

是表示前面的项可重复n次的占位符。

注释

SQLServer的每个数据库最多可存储20亿个表,每个表可以有1024列。

表的行数及总大小仅受可用存储空间的限制。

每行最多可以存储8,060字节。

如果创建具有varchar、nvarchar或varbinary列的表,并且列的字节总数超过8,060字节,虽然仍可以创建此表,但会出现警告信息。

如果试图插入超过8,060字节的行或对行进行更新以至字节总数超过8,060,将出现错误信息并且语句执行失败。

包含sql_variant列的CREATETABLE语句可以生成下列警告:

Thetotalrowsize(xx)fortable'

yy'

exceedsthemaximumnumberofbytesperrow(8060).Rowsthatexceedthemaximumnumberofbyteswillnotbeadded.

出现该警告是因为sql_variant的最大长度只能为8016字节。

当某个sql_variant列包含与最大长度接近的值时,它可以超过行的最大大小限制。

每个表最多可以有249个非聚集索引和一个聚集索引。

其中包括所有为支持表中所定义的PRIMARYKEY和UNIQUE约束而生成的索引。

SQLServer在列定义中并不强制以特定的顺序指定DEFAULT、IDENTITY、ROWGUIDCOL或列约束。

临时表

可以创建本地和全局临时表。

本地临时表仅在当前会话中可见;

全局临时表在所有会话中都可见。

本地临时表的名称前面有一个编号符(#table_name),而全局临时表的名称前面有两个编号符(##table_name)。

SQL语句使用CREATETABLE语句中为table_name指定的名称引用临时表:

CREATETABLE#MyTempTable(colaINTPRIMARYKEY)

INSERTINTO#MyTempTableVALUES

(1)

如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则SQLServer必须能够区分由不同用户创建的表。

为此,SQLServer在内部为每个本地临时表的表名追加一个数字后缀。

存储在tempdb数据库的sysobjects表中的临时表,其全名由CREATETABLE语句中指定的表名和系统生成的数字后缀组成。

为了允许追加后缀,为本地临时表指定的表名table_name不能超过116个字符。

除非使用DROPTABLE语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:

∙当存储过程完成时,将自动除去在存储过程中创建的本地临时表。

由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。

但调用创建此表的存储过程的进程无法引用此表。

∙所有其它本地临时表在当前会话结束时自动除去。

∙全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。

任务与表之间的关联只在单个Transact-SQL语句的生存周期内保持。

换言之,当创建全局临时表的会话结束时,最后一条引用此表的Transact-SQL语句完成后,将自动除去此表。

在存储过程或触发器中创建的本地临时表与在调用存储过程或触发器之前创建的同名临时表不同。

如果查询引用临时表,而同时有两个同名的临时表,则不定义针对哪个表解析该查询。

嵌套存储过程同样可以创建与调用它的存储过程所创建的临时表同名的临时表。

嵌套存储过程中对表名的所有引用都被解释为是针对该嵌套过程所创建的表,例如:

CREATEPROCEDURETest2

AS

CREATETABLE#t(xINTPRIMARYKEY)

INSERTINTO#tVALUES

(2)

SELECTTest2Col=xFROM#t

GO

CREATEPROCEDURETest1

INSERTINTO#tVALUES

(1)

SELECTTest1Col=xFROM#t

EXECTest2

INSERTINTO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1