分享
 
 
 

ALTERTABLE

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。

语法

ALTER TABLE table

{ [ ALTER COLUMN column_name

{ new_data_type [ ( precision [ , scale ] ) ]

[ COLLATE ]

[ NULL | NOT NULL ]

| {ADD | DROP } ROWGUIDCOL }

]

| ADD

{ [ ]

| column_name AS computed_column_expression

} [ ,...n ]

| [ WITH CHECK | WITH NOCHECK ] ADD

{ } [ ,...n ]

| DROP

{ [ CONSTRAINT ] constraint_name

| COLUMN column } [ ,...n ]

| { CHECK | NOCHECK } CONSTRAINT

{ ALL | constraint_name [ ,...n ] }

| { ENABLE | DISABLE } TRIGGER

{ ALL | trigger_name [ ,...n ] }

}

::=

{ column_name data_type }

[ [ DEFAULT constant_expression ] [ WITH VALUES ]

| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]

]

[ ROWGUIDCOL ]

[ COLLATE ]

[ ] [ ...n ]

::=

[ 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 )

}

::=

[ CONSTRAINT constraint_name ]

{ [ { PRIMARY KEY | UNIQUE }

[ CLUSTERED | NONCLUSTERED ]

{ ( column [ ,...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 ]

| DEFAULT constant_expression

[ FOR column ] [ WITH VALUES ]

| CHECK [ NOT FOR REPLICATION ]

( search_conditions )

}

参数

table

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

ALTER COLUMN

指定要更改给定列。如果兼容级别是 65 或小于 65,将不允许使用 ALTER COLUMN。

要更改的列不能是:

数据类型为 text、image、ntext 或 timestamp 的列。

表的 ROWGUIDCOL 列。

计算列或用于计算列中的列。

被复制列。

用在索引中的列,除非该列数据类型是 varchar、nvarchar 或 varbinary,数据类型没有更改,而且新列大小等于或者大于旧列大小。

用在由 CREATE STATISTICS 语句创建的统计中的列。首先用 DROP STATISTICS 语句删除统计。由查询优化器自动生成的统计会由 ALTER COLUMN 自动除去。

用在 PRIMARY KEY 或 [FOREIGN KEY] REFERENCES 约束中的列。

用在 CHECK 或 UNIQUE 约束中的列,除非用在 CHECK 或 UNIQUE 约束中的可变长度列的长度允许更改。

有相关联的默认值的列,除非在不更改数据类型的情况下允许更改列的长度、精度或小数位数。

有些数据类型的更改可能导致数据的更改。例如,将数据类型为 nchar 或 nvarchar 的列更改为 char 或 varchar 类型,将导致扩展字符的转换。降低列的精度和小数位数可能导致数据截断。

column_name

是要更改、添加或除去的列的名称。对于新列,如果数据类型为 timestamp,column_name 可以省略。对于 timestamp 数据类型的列,如果未指定 column_name,将使用名称 timestamp。

new_data_type

是要更改的列的新数据类型。要更改的列的 new_data_type 应符合下列准则:

原来的数据类型必须可以隐式转换为新数据类型。

new_data_type 类型不能为 timestamp。

对 ALTER COLUMN,ANSI 空默认值始终打开;如果没有指定,列将可为空。

对 ALTER COLUMN,ANSI 填充始终打开。

如果要更改的列是标识列,new_data_type 必须是支持标识属性的数据类型。

将忽略 SET ARITHABORT 的当前设置。ALTER TABLE 语句的行为如同 ARITHABORT 选项为 ON 时一样。

precision

是指定数据类型的精度。

scale

是指定数据类型的小数位数。

COLLATE

为更改列指定新的排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。

COLLATE 子句只能用于更改数据类型为 char、varchar、text、nchar、nvarchar 和 ntext 的列的排序规则。如果未指定,则此列采用数据库的默认排序规则。

若满足下列条件,则 ALTER COLUMN 不能更改排序规则:

检查约束、外键约束或计算列引用了更改列。

在此列上创建了索引、统计或全文索引。更改列的排序规则时,该列上自动创建的统计将除去。

SCHEMABOUND 视图或函数引用了此列。

NULL | NOT NULL

指定该列是否可接受空值。不允许空值的列只有在指定了默认值的情况下,才能用 ALTER TABLE 语句向表中添加。添加到表中的新列要么允许空值,要么必须指定默认值。

如果新列允许空值,而且没有指定默认值,那么新列在表中每一行都包含空值。如果新列允许空值并且指定了新列的默认值,那么可以使用 WITH VALUES 选项在表中所有现有行的新列中存储默认值。

如果新列不允许空值,那么新列必须具有 DEFAULT 定义,而且新列的所有现有行中将自动装载该默认值。

可在 ALTER COLUMN 语句中指定 NULL 以使 NOT NULL 列允许空值,但 PRIMARY KEY 约束中的列除外。只有列中不包含空值时,ALTER COLUMN 中才可指定 NOT NULL。必须将空值更新为非空值后,才允许执行 ALTER COLUMN NOT NULL 语句,比如:

UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL

ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL

如果 ALTER COLUMN 中指定了 NULL 或 NOT NULL,那么必须同时指定 new_data_type [(precision [, scale ])]。如果不更改数据类型、精度和小数位数,请指定列的这些值的当前值。

[ {ADD | DROP} ROWGUIDCOL ]

指定在指定列上添加或除去 ROWGUIDCOL 属性。ROWGUIDCOL 是一个关键字,表示列是行全局唯一标识符列。对于每个表只能指派一个 uniqueidentifier 列作为 ROWGUIDCOL 列。ROWGUIDCOL 属性只能指派给 uniqueidentifier 列。

ROWGUIDCOL 属性并不强制列中所存储值的唯一性。该属性也不会为插入到表中的新行自动生成值。若要为每列生成唯一值,那么或者在 INSERT 语句中使用 NEWID 函数,或者将 NEWID 函数指定为该列的默认值。

ADD

指定要添加一个或多个列定义、计算列定义或者表约束。

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()) 上则不能,因为该值将在

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有