SQL 数据库表的修改


当表创建好后,可能根据需要要对表的列、约束等属性进行添加、删除或修改,这就需要修改表结构。

7.4.1 用Enterprise Manager 修改
在Enterprise Manager 中选择要进行改动的表,单击右键,从快捷菜单中选择“DesignTable”选项,则会出现如图7-4 所示的修改表结构对话框。可以在图7-4 所示的对话框中修改列的数据类型、名称等属性或添加、删除列,也可以指定表的主关键字约束。单击工具栏中的图标 ,出现如图7-5 所示的编辑表和约束的属性的对话框。可以在其中编辑各种约束和一些表的属性。

7.4.2 用ALTER TABLE 命令修改
ALTER TABLE 命令可以添加或删除表的列、约束,也可以禁用或启用已存在的约束
或触发器。其语法如下:
ALTER TABLE table
{ [ALTER COLUMN column_name
{ new_data_type [ (precision[, scale] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP} ROWGUIDCOL } ]
| ADD
{ [

  1<column_definition> ]   
  2| column_name AS computed_column_expression   
  3}[,...n]   
  4| [WITH CHECK | WITH NOCHECK] ADD   
  5{ <table_constraint> }[,...n]   
  6| DROP   
  7{ [CONSTRAINT] constraint_name   
  8| COLUMN column   
  9}[,...n]   
 10| {CHECK | NOCHECK} CONSTRAINT   
 11{ALL | constraint_name[,...n]}   
 12| {ENABLE | DISABLE} TRIGGER   
 13{ALL | trigger_name[,...n]}   
 14}   
 15<column_definition> ::= { column_name data_type }   
 16[ [ DEFAULT constant_expression ]   
 17| [ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ]   
 18]   
 19[ ROWGUIDCOL ]   
 20[ COLLATE &lt; collation_name &gt; ]   
 21[ <column_constraint>] [ ...n]   
 22<column_constraint> ::= [CONSTRAINT constraint_name]   
 23{ [ NULL | NOT NULL ]   
 24| [ { PRIMARY KEY | UNIQUE }   
 25[CLUSTERED | NONCLUSTERED]   
 26[WITH FILLFACTOR = fillfactor]   
 27[ON {filegroup | DEFAULT} ] ] ]   
 28| [ [FOREIGN KEY]   
 29REFERENCES ref_table [(ref_column) ]   
 30[ ON DELETE { CASCADE | NO ACTION } ]   
 31[ ON UPDATE { CASCADE | NO ACTION } ]   
 32[NOT FOR REPLICATION ] ]   
 33| CHECK [NOT FOR REPLICATION]   
 34(logical_expression)}   
 35<table_constraint> ::= [CONSTRAINT constraint_name]   
 36{ [ { PRIMARY KEY | UNIQUE }   
 37[ CLUSTERED | NONCLUSTERED]   
 38{ ( column [ ASC | DESC ] [,...n] ) }   
 39[ WITH FILLFACTOR = fillfactor]   
 40[ON {filegroup | DEFAULT} ] ]   
 41| FOREIGN KEY   
 42[(column[,...n])]   
 43REFERENCES ref_table [(ref_column[,...n])]   
 44[NOT FOR REPLICATION]   
 45[ ON DELETE { CASCADE | NO ACTION } ]   
 46[ ON UPDATE { CASCADE | NO ACTION } ]   
 47| CHECK [NOT FOR REPLICATION]   
 48(search_conditions)}   
 49各参数说明如下:   
 50
 51
 52  * table   
 53指定要修改的表的名称。如果表不在当前数据库中或表不属于当前的用户,就必须指 明其所属的数据库名称和所有者名称。 
 54  * ALTER COLUMN   
 55![](http://www.cndw.com/ShowImg.asp?p=/2006-4-13/81151aimga167.gif)
 56  * new_data_type   
 57指定新的数据类型名称,其使用标准如下:   
 58列的原数据类型应可以转换为新的数据类型;   
 59新的数据类型不能为TIMESTAMP;   
 60新的数据类型允许列为NULL 值;   
 61如果原来的列是IDENTITY 列,则新的数据类型应支持IDENTITY 特性;   
 62当前的SET ARITHABORT 设置将被视为处于ON 状态。 
 63  * precision   
 64指定新数据类型的位数。 
 65  * scale   
 66指定新数据类型的小数位数。 
 67  * NULL | NOT NULL   
 68指明列是否允许NULL 值。如果添加列到表中时,指定它为NOT NULL, 则必须指定此列的缺省值。选择此项后,new_data_type [(precision [, scale ])]选项就必须指定,即 使precision 和scale 选项均不变,当前的数据类型也需要指出来。 
 69  * WITH CHECK | WITH NOCHECK   
 70指定已经存在于表中的数据是否需要使用新添加的或刚启用的FOREIGN KEY 约束 或CHECK 约束来验证。如果不指定,WITH CHECK 作为新添加约束的缺省选项,WITH NOCHECK 作为启用旧约束的缺省选项。 
 71  * {ADD | DROP} ROWGUIDCOL   
 72添加或删除列的ROWGUIDCOL 属性。ROWGUIDCOL 属性只能指定给一个 UNIQUEIDENTIFIER 列。 
 73  * ADD   
 74添加一个或多个列、计算列或表约束的定义。 
 75  * computed_column_expression   
 76计算列的计算表达式。 
 77  * DROP { [CONSTRAINT] constraint_name | COLUMN column_name }   
 78指定要删除的约束或列的名称。处于下列情况的列不能删除;   
 79用于复制的列;   
 80用于索引的列;   
 81用于CHECK FOREIGN KEY UNIQUE 或PRIMARY KEY 约束的列;   
 82定义了缺省约束或绑定了一个缺省值对象的列;   
 83绑定了规则(Rule)的列。 
 84  * { CHECK | NOCHECK} CONSTRAINT   
 85启用或禁用FOREIGN KEY 或CHECK 约束。 
 86  * ALL   
 87使用NOCHECK 选项禁用所有的约束,或使用CHECK 选项启用所有的约束。 
 88  * {ENABLE | DISABLE} TRIGGER   
 89启用或禁用触发器。 
 90  * ALL   
 91启用或禁用选项针对所有的触发器。 
 92  * trigger_name   
 93指定触发器名称。 
 94
 95其它参数与创建表和约束中所讲的相同。   
 96例7-13: 创建一个定货商信息表,然后修改简介列的数据类型。   
 97create table order_firm (   
 98order_firm_id char (8) primary key,   
 99firm_name varchar (50) not null   
100firm_introduce char(50) null   
101) on [primary]   
102alter table order_firm   
103alter column firm_introduce varchar(250) null   
104例7-14: 创建一个定货表再插入一个定货商编号列。   
105create table orders(   
106order_id char(8) ,   
107p_id char(8) foreign key references products(p_id),   
108order_quantity smallint check (order_quantity&gt;=10),   
109constraint pk_order_id primary key (order_id),   
110) on [primary]   
111alter table orders   
112add order_firm_id char(8) null   
113constraint fk_order_firm_id foreign key references order_firm(order_firm_id)   
114例7-15: 更改上例中的检查约束,并删除一个外关键字约束。   
115alter table orders   
116add constraint chk_order_quantity check (order_quantity&gt;=100)   
117drop constraint chk_order_quantity   
118  
1197.4.3 用存储过程Sp_rename 修改表名和列名    
120Sp_rename 存储过程可以修改当前数据库中用户对象的名称,如表、列、索引、存储过程等。其语法如下:   
121sp_rename [@objname =] 'object_name',   
122[@newname =] 'new_name'   
123[, [@objtype =] 'object_type']   
124其中[@objtype =] 'object_type'是要改名的对象的类型,其值可以为‘COLUMN’、‘DATABASE’、‘INDEX’、‘USERDATATYPE’、‘OBJECT’。值‘OBJECT’指代了系统表sysobjects 中的所有对象,如表、视图、存储过程、触发器、规则、约束等。‘OBJECT’值为默认值。   
125  
126例7-16:更改orders 表的列p_id 名称为products_id   
127exec sp_rename 'orders.[p_id]', 'product_id', 'column'   
128运行结果如下:   
129Caution: Changing any part of an object name could break scripts and stored procedures.   
130The column was renamed to 'product_id'.   
131  
132例7-17: 更改orders 表的名称为p_orders。   
133exec sp_rename 'orders', 'p_orders''   
134运行结果如下:   
135Caution: Changing any part of an object name could break scripts and stored procedures.   
136The object was renamed to 'p_orders'.</table_constraint></column_constraint></column_constraint></column_definition></table_constraint></column_definition>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus