SQL新修改的表字段列

SQL新修改的表字段列
例如:
修改(在列名有列关键字之前)
修改表{ } { }用户修改列的名称为varchar(35)空
新添加的
更改表{用户}添加{数值}(18, 8)NULL默认值0
通过更改、添加、删除列和约束,或启用或禁用约束和触发器,来更改表的定义。

语法
修改表
{ {改变柱column_name
{ new_data_type {(精密{,} }规模)
{整理}
{零} |不空
| | {添加DROP ROWGUIDCOL } }
}
|添加
{ { }
| column_name作为computed_column_expression
{ {,…n }
添加| | {检查NOCHECK }
{ { { },…n }
|滴
{ { } constraint_name约束
|柱} {列,n }…
| {检查约束| NOCHECK }
| { } } { constraint_name所有…
| {启用禁用触发器| }
| { } } { trigger_name所有…
}

::=
{ column_name data_type }
{ { } { } constant_expression默认值
| {身份{(种子、增量){ } } }不复制
}
{ ROWGUIDCOL }
{整理}
{ { { }…n }

::=
{约束constraint_name }
{ {零} |不空
|主键| {唯一} {
| { }聚集聚集
{填充因子为FILLFACTOR }
{在} { } |默认文件
}
| { {外键}
引用ref_table {(ref_column)}
{ON DELETE NO} | {CASCADE ACTION}
{在} {更新没有|级联作用}
{不用于复制}
}
| {不是复制}检查
(logical_expression)
}

::=
{约束constraint_name }
{ { } {关键|初级独特
| { }聚集聚集
{(列{,…})}
{填充因子为FILLFACTOR }
{在} { } |默认文件组
}
|外键
{(列{,…})}
引用ref_table {(ref_column {,…})}
{在}删除不| {级联作用}
{在} {更新没有|级联作用}
{不用于复制}
|默认constant_expression
{值为}的列{
| {不是复制}检查
(search_conditions)
}

参数


要更改的表的名称。如果表不在当前数据库中,或者不属于当前用户,则可以显式指定数据库和所有者。

改变柱

指定给定列被更改。如果兼容级别为65或小于65,则不允许更改列。

要更改的列不能为:

数据类型的列的文本、图像、ntext或时间戳。
桌子的ROWGUIDCOL列。
计算列中使用的计算列或列。
复制列被复制。
用于索引的列,除非该列的数据类型是varchar、nvarchar或varbinary数据类型没有改变,和新列的大小等于或大于老柱尺寸。
统计报表创建的统计数据中的列。首先,统计信息被下拉语句语句删除。查询优化器自动生成的统计信息将自动由更改列删除。
主键或{外键}引用约束中使用的列。
在检查或唯一约束中使用的列,除非检查或唯一约束中可变长度列的长度允许更改。
具有相关联的默认值的列,除非允许在不改变数据类型的情况下更改列的长度、精度或数字。
column_name

是要改变,添加或删除的列的名称。为新列,如果数据类型是时间戳,column_name可以省略。为timestamp数据类型的列,如果没有指定column_name,名字是用时间戳。

new_data_type

新的数据类型的列必须改变。该列被改变的new_data_type应按照以下原则:

原始数据类型必须隐式转换为新的数据类型。
的new_data_type类型不能时间戳。
对于修改列,总是打开ANSI空默认值;如果未指定,则列将为空。
对于修改列,ANSI填充始终是打开的。
如果要更改的列的标识符列的数据类型的new_data_type必须支持身份属性
对于SET ARITHABORT当前的设置将被忽略。ALTER TABLE语句的行为一样ARITHABORT选项是对的。
精度

是指定数据类型的精度。

规模

是指定数据类型的位数。有关有效十进制数的更多信息,

整理

为更改列指定了一个新的排序规则。排序规则名称可以是Windows排序规则名或SQL排序规则名。

COLLATE子句只能用来改变排序规则的数据类型为char、varchar、nvarchar、文本、nchar和ntext列。如果没有指定,采用数据库的默认排序规则的柱。

如果满足以下条件,则更改列不能更改排序规则:

检查约束、外键约束或计算列引用更改列。
在这个列上创建索引、统计或全文索引。当更改列的排序规则时,将自动在该列上创建的统计信息被删除。
本栏目由schemabound视图或函数引用。
空不空|

指定该列是否可以接受null值。只有在指定默认值时,才允许将不允许空值的列添加到表中。添加到表中的新列可以允许指定空值或默认值。

如果新列允许空值和未指定默认值,新的列包含表中每一行中的空值。如果新列允许空值,指定新列的默认值,你可以使用与价值选择在所有表中的所有现有的行新的列存储的默认值。

如果新列不允许空值,则新列必须具有默认定义,新列的所有现有行将自动加载默认值。

空可以在修改列的语句允许非空的列允许空值,除主键约束的列不为空。只可以指定只有在不改变列的空值中包含的列。空值后,必须更新为非空值,改变柱不空语句是允许的,如:

更新表设置nullcol = n'some_value'where nullcol是nullalter表mytable改变
如果为空或非空列中指定的更改,则必须指定new_data_type {(精密{ },规模)在同一时间。如果你不改变数据类型、精度和小数位数,,请指定列的值的电流值。

{ {插} } | ROWGUIDCOL

指定ROWGUIDCOL属性添加或删除在指定的column.rowguidcol是一个关键字,表明一个列是行的全局唯一标识符列。每个表,只有一个唯一标识符列可指定ROWGUIDCOL列。ROWGUIDCOL属性只能分配到的唯一标识符列。

ROWGUIDCOL属性不存储在列中的值是唯一的。这个属性不会自动生成的值插入到表中的行。产生每列一个独特的价值,在插入语句,然后使用NEWID函数,或指定NEWID函数作为该列的默认值。

添加

指定一个或多个列定义、列定义或表约束。

computed_column_expression

它是一个表达式,定义计算列的值。计算列是一个虚拟的柱不是物理地存储在表中,这是计算的表达式,而表达式使用同一表中的其他列。例如,对计算列的定义可以是:成本价×数量一个表达式可以是列名、常量,函数,变量,或任意组合,由一个或多个运营商连接上述元素,表达不可查询。

计算的列可用于选择列表、WHERE子句、逐句或任何可与正则表达式一起使用的其他位置,但在下列情况下除外:

计算列不能作为默认或外键约束定义,也不能用非空约束的定义。但是,如果计算列是由确定性表达式定义的数据类型,并允许在索引列的计算结果,可以作为索引或主key或unique约束部分键列。
例如,如果有整数列在表A和B,那么指数可以在计算列A + B索引,而计算列+ DatePart(DD,getdate())是做不到的,因为价值将在随后的电话改变了。

计算列不能用作INSERT或UPDATE语句的目标
显示列的每一行可能有不同的值,因为表中的行可能有不同的值,所以列的每一行可能有不同的值。

n

是可以重复n次的上一项的占位符。

与| NOCHECK检查

是否指定表中的数据与新增或重新启用外键或检查约束验证。如果没有指定,为新的约束,假设与检查,并为重新启用约束,它具有NOCHECK。

的检查与NOCHECK条款不能用作主键和唯一约束。

如果你不想用新的检查或外键约束验证现有的数据,请使用WITHNOCHECK,这是不推荐的,但在少数情况下除外。新约束将在所有后续更新生效。任何违反约束,约束的添加约束NOCHECK可能导致未来的更新失败。如果更新这些更新操作,则行包含不符合约束的数据。

查询优化器不会考虑以NOCHECK定义的约束。这些约束条件将被忽略,直到这些约束重新启用使用ALTER TABLE语句检查约束。

滴{约束} constraint_name柱| { column_name }

指定的表或column_name constraint_name删除。如果兼容级别小于或等于65,降柱是不允许的。你可以列出多个列或约束。以下列不能被删除:

复制列被复制。
索引中使用的列。
检查、外键、唯一或主键约束中使用的列。
具有相关联的默认值(由默认关键字定义)的列或绑定到默认对象的列。
绑定到规则的列。
{检查约束| NOCHECK }

指定要启用或禁用constraint_name.if是残疾人,该列将被插入或更新在未来没有约束条件。此选项只能使用外键约束和检查约束。

所有
指定的选项来禁用NOCHECK所有约束的使用,或使所有约束使用检查选项。
{启用禁用触发器| }

指定要启用或禁用trigger_name.when触发器被禁用,定义表仍然存在。但是,在执行表上的INSERT、UPDATE或删除语句时,除非重新激活触发器,否则触发器的操作将不会执行。

所有
指定启用或禁用表中的所有触发器。

trigger_name
指定要启用或禁用的触发器的名称。
column_name data_type

新的column.data_type数据类型可以是任何微软(R)的SQL Server数据类型或用户定义的数据类型。

违约

是关键字指定该列的默认值,默认值定义可以用来提供的表中的现有行的新列值。默认的定义不能被添加到一个timestamp数据类型的列,一个身份属性,现有的默认定义,或绑定默认值。如果列的默认值,旧的默认值必须在新的默认值,可以添加删除。保持SQL Server兼容以前的版本,它可能给默认约束名称。

身份

指定新列是标识列。当新的一行添加到表中,SQL Server提供了一个独特的柱的增量值。标识符列通常是作为独特的行标识符表的主键约束。标识属性可以给tinyint、smallint、int、bigint,小数(P,0),或数字(P,0)列。唯一标识符列可以为每个表创建。关键词默认绑定默认值不能用于标识列。无论是种子和增量可以同时指定或未指定。如果的两个没有指定,默认值为(1,1)。

种子
它是加载在表中的第一行的值。

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

这不是强制执行的财产时,一份身份登录(如sqlrepl)插入table.not复制也可以为指定的约束。当一份登录插入表格,约束条件不检查。

约束

指定主键、唯一、外键或检查约束的开始,或指定默认定义的开始。

Constrain_name

这是一个新的约束。约束名称必须符合标识符规则,但第一个字符的名称不能为#。如果没有提供constraint_name,通过使用该系统生成的名称是约束。

主键

通过一个惟一索引对给定列或多列强制实体完整性的约束。每个表只创建一个主键约束。

独特的

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

聚集聚集|

主键或唯一约束指定创建聚集或非聚集索引,主键约束默认聚类;独特的约束的非默认。

如果一个聚集约束或索引表中,集群不能指定修改表。如果已经有一个聚集约束或索引表中的主键约束默认聚集。

填充因子为FILLFACTOR

指定的程度,每个索引页充满时,SQL Server存储索引数据。用户指定填充因子的范围从1到100。如果没有指定,默认值是0。当你创建一个索引,较低的填充因子值,没有增加新的指标,更多的自由空间,新的空间分配。

在{ } |默认文件组

该指数是创建作为一个约束的存储位置,如果文件组指定,该指数将在文件组创建的。如果默认指定,该指数将在默认文件组创建的。如果没有指定,该指数将创建文件组中的表位于。添加一个聚集索引主键或唯一约束时,如果指定,整个表将被移动到指定的文件组时创建聚集索引。

在这里,默认是不keyword.default是默认文件组的标识符,必须定义和符号,如默认或默认} {。

外键…引用

这是一个约束,它为列中的数据提供引用完整性。外键约束列中的每个值都存在于引用表的指定列中。

ref_table

它是外键约束引用的表。

ref_column

它是一个列或多个列(在括号中),由新外键约束引用。

在删除{级联不行动} |

指定已更改的行具有引用关系,行引用的行从父表中删除,要更改的操作被移到已更改的行。默认设置为不动作。

如果指定了级联,当引用行从父表中删除时,引用行将从引用表中删除。如果没有指定操作,SQLServer将产生错误并回滚父表中的行删除操作。

如果在表中已经存在了删除触发器而不是触发器,那么就不能定义删除的级联操作。

例如,在Northwind数据库,订单表和客户表之间的引用关系的存在,orders.customerid外键指的是customers.customerid主键。

如果删除的声明是在一排的客户表执行,和级联删除操作指定为Orders.CustomerID,然后SQL服务器将检查是否有一行或列的删除行命令表相关,如果相关线的存在,在订单表中的相关行一起被删除的行在客户表。

另一方面,如果没有指定操作,如果在客户表中引用要删除的行的订单表中至少有一行,则SQLServer将生成一个错误并回滚Customer表中的删除操作。

更新级联没有行动| } {

指定更改的行具有引用关系,行引用的行在父表中更新,要更改的操作将在更改的行上进行。默认设置为不动作。

如果指定了级联,当引用行在父表中更新时,将在参考表中更新参考行。如果未指定任何操作,SQLServer将产生错误并回滚父表中的行更新操作。

如果在表中已经存在了删除触发器而不是触发器,那么就不能定义删除的级联操作。

例如,在Northwind数据库,订单表和客户表之间的引用关系的存在,orders.customerid外键指的是customers.customerid主键。

如果一个UPDATE语句是一排客户表执行,和级联更新操作指定为Orders.CustomerID,然后SQL服务器将检查是否有一行或一行行的更新在Orders表中的相关,如果相关线的存在,在订单表中的相关线路将与引用行在客户表更新。

相反,如果没有指定操作,如果在客户表中引用要更新的行表中至少有一行,则SQLServer将导致错误并回滚Customer表中的更新操作。

{ } | asc desc

指定添加到表约束的列或多列的顺序。默认设置为ASC。

与价值观

指定新列添加到现有列的默认constant_expression给定值。只有在添加坐标条款违约在指定的情况下,你可以使用的值。如果列被添加允许空值与指定的值,默认值将被存储在现有行的新列值。如果没有指定的列允许空值,则为空值将被存储在现有行的新列。如果新列不允许空值,默认值将被存储在现有行的新列,无论是否有价值是确定的或不。

列{,…n }

用于新约束的一列或一系列列(括号中)。

constant_expression

是一个字值、空值或系统函数,它用作列的默认值。



指定与表级默认定义关联的列。

检查

通过限制域完整性的可能值,可以将其输入到一个或多个列中,这是一种约束。

logical_expression

这是一个逻辑表达式,返回真或假检查约束检查constraint.logical_expression不能引用其他表,但可以是指在同一个表中同一行的其他列。

笔记
若要添加新的数据行,请使用INSERT语句。要删除一行数据,请使用删除或截断表语句。

通过ALTER TABLE语句中指定的更改将立即执行。如果这些变化需要修改表中,修改表将更新这些rows.alter表会在表的架构修改锁保证其他连接不能引用表(甚至不是参考元数据)中的变化。表的变化将被记录在日志中,可以完全恢复,在一个非常大的表中的所有行的变化,如删除一列或默认添加非空的列,可能需要很长时间才能完成,并产生大量的日志记录,如插入、更新或删除影响了一大批行语句,这种ALTER TABLE语句也应该是你SED仔细。

如果有一个执行计划是指在过程缓存表,修改表将这些标记为重新编译执行计划在下一个执行。

如果表语句指定了其他表引用的列值的变化,那么以下两个事件中的一个将根据引用表中的更新或删除指定的操作来执行。

如果引用表或指定的非动作(默认值)中没有指定值,则回滚表表引起的父表中引用的列的操作将被回滚,而SQLServer将导致错误。
如果在引用表中指定了级联,则将由父表及其相关表应用到由父表语句引起的父表的更改。
添加修改表的sql_variant列语句生成以下警告:

全行大小(XX)为table'yy'exceeds最大,,8060 。
因为这sql_variant最大长度为8016字节,生成警告。当一个sql_variant列的值接近最大长度,将超过该线的最大长度字节的限制。

当ALTER TABLE语句执行表架构绑定视图,限制在一个简单的指数变化表的电流限制相同。添加列是允许的。但是,它不允许删除或参与的架构绑定视图表改变列。如果改变表的语句需要改变结构中使用的绑定视图的列、更改操作将失败,并且SQL Server将导致一个错误消息

创建参考表的架构绑定视图不影响触发器在基表上的添加或删除。

当约束去掉,创建为约束的一部分的索引将被删除。创建索引创建索引必须使用DROP INDEX语句删除。DBCC DBREINDEX语句可用来重建约束定义的索引部分的;不使用ALTER TABLE,约束先删除,然后重新添加。

在删除所有基于列的索引和约束后,必须删除列。

当添加一个约束时,所有现有的数据都应该被限制以验证违规行为。

当一个新的主键或唯一约束添加到一个现有的列,列中的数据必须是唯一的。如果有重复值,ALTER TABLE语句将失败。当主键或唯一约束的增加,与NOCHECK选项不工作

每个主键和唯一约束将生成索引。唯一和主键约束的数目不会导致表上非聚集索引的数目大于249,聚集索引的数量大于1。

如果数据类型的列可以添加唯一标识符,然后列可以使用NEWID()函数为表中的现有行的新列提供唯一的标识符值的默认值。

SQL Server不指定默认情况下,身份,或在柱ROWGUIDCOL,定义在一个特定的顺序列约束。

改变列的条款修改表不绑定或取消绑定在column.sp_bindrule或sp_unbindrule任何规则必须使用绑定或取消绑定规则分别。

规则可以被绑定到用户定义的数据类型,然后创建表将自动绑定规则由用户定义的数据类型定义的列,列数据类型的改变和修改列的,这些规则是不自由。在原有的用户定义数据类型的规则绑定到列修改列的变化。后列的数据类型,任何sp_unbindrule,随后执行用户定义的数据类型来取消绑定规则不改变数据类型约束的列的规则的结果。如果改变柱变化的列定义的数据类型,结合规则的用户数据型,然后被绑定到新的数据类型的规则将不会被绑定到列。

管辖权
修改表的权限授予该表的所有者,sysadmin固定服务器角色的成员,db_owner和db_ddladmin固定数据库角色的成员,它是不可转让的。

样品
更改表以添加新列
下一个示例添加一个允许空值的列,并且不通过默认定义提供一个值。

创建表doc_exa(column_a int)goalter表doc_exa添加column_b varchar(20)nullgoexec
更改表以删除列。
下一个示例修改表以删除列。

创建表doc_exb(column_a int,column_b varchar(20)空)goalter表doc_exb,goalter,它是一个非常重要的因素。
更改表以添加具有约束的列。
下一个示例添加一个新的列,该表具有唯一的约束。

创建表doc_exc(column_a int)goalter表doc_exc添加column_b varchar 20。
D.变更表添加未经核实的约束
下一个示例添加约束表中的现有列。有价值,违反了该列中的约束;因此,与NOCHECK用来防止现有行验证约束,使得约束添加。

创建表doc_exd(column_a int)goinsert为doc_exd值(1)goalter,- 1,doc_exd 1。
更改表以添加多个有约束的列
下一个示例向表添加了许多具有约束的新列。第一个新列具有标识属性;表中每行的标识符列将具有递增的新值。

创建表doc_exe(column_a INT约束column_a_un独特的goalter表doc_exe)添加主键标识列。 / *加* column_b int identityconstraint column_b_pk主键,添加一列在同一表中引用另一列/。int空约束column_c_fk / column_c参考doc_exe(column_a),添加一个约束/执行/ *,非空的数据是一个有效的电话号码格式塔。* / column_d varchar(16)空约束column_d_chkcheck(column_d是null或column_d像{ } { } { 0-9 0-9 0-9 } { } { } - 0-9 0-9 { } { } 0-9 0-9 喜欢orcolumn_d({ } { } { 0-9 0-9 0-9 }){ } { 0-9 0-9 } { } { } - { 0-9 0-9 0-9 } { } { } 0-9 0-9),添加一个非空的列有 / *默认。* / column_e十进制(3,3)约束column_e_defaultdefault.081goexecsp_help doc_exegodrop表doc_exego
添加一个默认值的空列。
下一个示例添加一个空的、默认定义的列,并使用值为表中的每个现有行提供值。如果不使用值,则每行的新列将具有空值。

ALTER TABLE表添加adddate smalldatetime值(NULLCONSTRAINT AddDateDfltDEFAULT getdate)
G.禁用和重新启用约束
下一个示例禁用用于限制可接受的工资data.with NOCHECK约束与一起使用ALTER TABLE禁用约束和执行会约束violations.with检查约束恢复约束的插入操作。

创建表cnst_example(ID为不空,名varchar(10)不为空,非空约束salary_cap薪水支票(工资<100000))有效的insertsinsert为cnst_example值(1乔布朗
H.禁用和重新启用触发器
下面的例子使用禁用触发器选项改变表禁用触发器可以执行插入操作,通常是在触发条件的违反。然后下一个例子使用使触发激活触发器。

创建表trig_example(ID int,NAME varchar(10),工资的钱去-- trigger.create触发)创建trig_example INSERTas trig1如果(选择计数从insertedwhere工资(*)> 100000)> 0beginprinttrig1错误:你试图插入一个工资回滚transactionendgo --尝试> 100000美元插入违反trigger.insert为trig_example值(帕特史密斯
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部