表A
列:a(关键字),b,c,d,e,f表B
列:a(关键字),c,d,f要求在表A修改、删除、插入的时候,表B跟着变化修改删除或插入说白了,就是一模一样,但是表B操作的时候不影响表A求 SQL 2000 个人版 的代码

解决方案 »

  1.   

    CREATE TRIGGER TRI_A_B_IDU ON A
    FOR INSERT,DELETE,UPDATE
    AS
    BEGIN
         DELETE B FROM B WHERE EXISTS(SELECT 1 FROM DELETED D WHERE D.A=B.A)
         UPDATE B SET C=I.C,D=I.D,F=I.F FROM B,INSERTED I WHERE B.A=I.A
         INSERT B SELECT A,C,D,F 
         FROM INSERTED I WHERE NOT EXISTS(SELECT 1 FROM B WHERE I.A=B.A)
    END
      

  2.   

    楼上的代码我没看,问题应该不大,,啰嗦一下
    1、楼主不要以菜鸟、新手的名义叫别人直接给出代码,对你成长没用处,当年我们读书的时候网络还不发达,难道就不学拉?思考才是最重要的。我本人比较反感什么东西都问代码,然后拿到了自己执行一下没问题就了事,也不去分析的。我没见过那个高手是拿别人代码就能成功的。如果有,介绍一下我认识。
    2、我反而建议全大写,因为有些DBMS是要把关键字全部转换成大写再编译、运行的。而且最起码关键字要全大写,这虽然看上去不重要,但是到后期维护的时候你就感觉得到了。这些建议都是一些大牛提出来的。
    3、你的要求完全可以使用表的级联来实现,只要两表是有关联的。而且设置了外键,详细请查阅联机丛书或者教材,我不会给出例子的。同时1楼的代码还有很大改进空间,估计是他只是给了个例子你参考而已,尽量不要直接用。
    4、你最后一句应该改成SQL Server2000的代码,只要是2000的,所有版本都是可以通用的,只是一些高级功能可能需要企业版这些才能运行。05、08、2012同理。
      

  3.   

    DELETE B FROM B WHERE EXISTS(SELECT 1 FROM DELETED D WHERE D.A=B.A)这句怎么理解:DELETE B FROM B 从B删除B表的信息
    SELECT 1 FROM DELETED D WHERE D.A=B.A 条件是** 这句不理解怎么多了个D表
      

  4.   

    我在给加了触发器后,怎么我用的管理软件给提示:“无法为更新定位行。一些值可能已在最后一次读取后更改”
    CREATE TRIGGER TRI_GZ ON GP_GZ_XXB
    FOR INSERT,DELETE,UPDATE
    AS
    BEGIN
      DELETE VK_GZ 
    FROM VK_GZ 
    WHERE EXISTS(SELECT 1 FROM DELETED D WHERE D.GZ_BH=VK_GZ.GZ_BH)
      UPDATE VK_GZ 
    SET GZ_MC=I.GZ_MC,GZ_DZ=I.GZ_DZ,GZ_MM=I.GZ_MM,SCBS=I.SCBS 
    FROM VK_GZ,INSERTED I 
    WHERE VK_GZ.GZ_BH=I.GZ_BH
      INSERT VK_GZ 
    SELECT GZ_BH,GZ_MC,GZ_DZ,GZ_MM,SCBS 
      FROM INSERTED I 
    WHERE NOT EXISTS(SELECT 1 FROM VK_GZ WHERE I.GZ_BH=VK_GZ.GZ_BH)
    END