开始搞项目的时候,数据库从头设计,一路改过来,现在表关系象蜘蛛网一样错综复杂。还有一堆触发器。
现在好了,接近完工,客户要求导入他们老系统里面的全部数据,由于老系统是FoxPro,大家都知道那是个什么东东,反正极不规范,因原有的系统根本没有验证和约束可言,存在输入错误造成的非常多的垃圾数据。等我把这些整理完一遍,用导入工具导入的时候,表约束又起了作用,导不进去,然后把数据库关系全部删去(心疼啊!)
这才导入,可是导入以后一看,触发器又起了作用,搞得数据面目全非,又把触发器删掉(又疼了一次)。敢问大仙们,你们在遇到类似问题时如何处理的?
现在好了,接近完工,客户要求导入他们老系统里面的全部数据,由于老系统是FoxPro,大家都知道那是个什么东东,反正极不规范,因原有的系统根本没有验证和约束可言,存在输入错误造成的非常多的垃圾数据。等我把这些整理完一遍,用导入工具导入的时候,表约束又起了作用,导不进去,然后把数据库关系全部删去(心疼啊!)
这才导入,可是导入以后一看,触发器又起了作用,搞得数据面目全非,又把触发器删掉(又疼了一次)。敢问大仙们,你们在遇到类似问题时如何处理的?
{ [ 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 ] }
}注意红色部分
{ CHECK | NOCHECK} CONSTRAINT指定启用或禁用 constraint_name。如果禁用,将来插入或更新该列时将不用该约束条件进行验证。此选项只能与 FOREIGN KEY 和 CHECK 约束一起使用。 ALL
指定使用 NOCHECK 选项禁用所有约束,或者使用 CHECK 选项启用所有约束。
{ENABLE | DISABLE} TRIGGER指定启用或禁用 trigger_name。当一个触发器被禁用时,它对表的定义依然存在;然而,当在表上执行 INSERT、UPDATE 或 DELETE 语句时,触发器中的操作将不执行,除非重新启用该触发器。 ALL
指定启用或禁用表中所有的触发器。trigger_name
指定要启用或禁用的触发器名称。 用alter table暂时将触发器与约束关闭,导入数据后,再将触发器与约束打开