开始搞项目的时候,数据库从头设计,一路改过来,现在表关系象蜘蛛网一样错综复杂。还有一堆触发器。
现在好了,接近完工,客户要求导入他们老系统里面的全部数据,由于老系统是FoxPro,大家都知道那是个什么东东,反正极不规范,因原有的系统根本没有验证和约束可言,存在输入错误造成的非常多的垃圾数据。等我把这些整理完一遍,用导入工具导入的时候,表约束又起了作用,导不进去,然后把数据库关系全部删去(心疼啊!)
这才导入,可是导入以后一看,触发器又起了作用,搞得数据面目全非,又把触发器删掉(又疼了一次)。敢问大仙们,你们在遇到类似问题时如何处理的?

解决方案 »

  1.   

    导入时,建立数据源连接,用语句导入。。(有时需要转换类型)。。用DTS、SSIS导入时是不触发触妇器的
      

  2.   

    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 ] } 

    }注意红色部分
    { CHECK | NOCHECK} CONSTRAINT指定启用或禁用 constraint_name。如果禁用,将来插入或更新该列时将不用该约束条件进行验证。此选项只能与 FOREIGN KEY 和 CHECK 约束一起使用。 ALL 
    指定使用 NOCHECK 选项禁用所有约束,或者使用 CHECK 选项启用所有约束。 
    {ENABLE | DISABLE} TRIGGER指定启用或禁用 trigger_name。当一个触发器被禁用时,它对表的定义依然存在;然而,当在表上执行 INSERT、UPDATE 或 DELETE 语句时,触发器中的操作将不执行,除非重新启用该触发器。 ALL 
    指定启用或禁用表中所有的触发器。trigger_name 
    指定要启用或禁用的触发器名称。 用alter table暂时将触发器与约束关闭,导入数据后,再将触发器与约束打开