作者:李巍shelton | 来源:互联网 | 2023-12-13 09:49
ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu
ALTER TABLE
通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。
语法
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] --看这里
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ < 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 [ ,...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 )
}
应该是用alter table,但我没试出来怎么用,请各位老大帮忙写写,表中本来是有数据的。
是因为需要升级表结构,但有好多字段类型跟以前不一样,还增加了不少字段,如果用alter table更改字段类型,会提示已存在结束在此列上。所以就想先把原表改名,然后创建新表(其中的serial列原来是IDENTITY属性,在创建的时候先去掉),然后把原表的内容导进来,再把serial加上IDENTITY属性。前几步都做好了,就最后的这步加上IDENTITY属性时我不知道怎么写。
7 个解决方案
alter table 表 alater column 列名 類形(如int) identity(int,1,1)
用SQL语句不能把已存在的列加上IDENTITY(1,1)属性的
建表时,直接就把serial就加上IDENTITY属性,导数据时这样导:
set identity_insert 表名 on
导数据...
set identity_insert 表名 off
-----------這樣可以加上去--------
alter table 表 drop column 列
alter table 表 add 列 int IDENTITY (1, 1)
还是数据库版回帖回得快啊
to pbsql(风云)
为什么企业管理器中可以给已存在的加上IDENTITY属性?不过你的方法我可以试一试,我的目的还是要用原来表中的ID值
to Softlee81307(孔腎)
如果drop掉后,岂不是丢掉了原来的ID值?
to flashasp(flashasp)
比如一个名为table1的表,其中有serial列,我要给这列加上IDENTITY(1,1),怎么写?ALTER TABLE table1 ADD CONSTRAINT SerialIDENTITY PRIMARY KEY serial 不行
为什么企业管理器中可以给已存在的加上IDENTITY属性?
你用时间探察器跟踪一下就知道了,在企业管理器中加,实际上也是删除后重建有identity属性的表然后再导入数据,与你要的过程一样