主表:订单表 Order
      orderID、  date  、    N   (orderID为主键)
        1       2010-01-23   .
        2       2010-01-24   .
        3       2010-01-25   .
        4       2010-01-26   .
        5       2010-01-27   .
子表:订单明细表OrderDetail
      orderID、  材料编号、数量、单价
         1         ZL001   23    23.2
         1         ZL001   23    23.2
         2         ZL001   23    23.2
         2         ZL001   23    23.2
         3         ZL001   27    23.1
         4         ZL001   12    23.2
         4         ZL001   3     23.0
         4         ZL001   23    23.2
想实现:当我更新主表中的orderID后,子表订单明细表的 orderID也跟着修改。我自己写了触发器,但有问题更新主表的orderID后,单明细表的 orderID没有跟着修改create trigger Order_Trigger on Order
for update
as 
begin
set nocount on
     declare @id int
     select @id=Orderid from inserted
begin
   update OrderDetail set Orderid=@id where Orderid=(select Orderid from inserted)
        end
end恳求各位大虾帮忙,指点错误在那? 或有其他更好的方法来实现

解决方案 »

  1.   

    补充下:我想批量更新主表的orderID,使得子表跟着自动更新orderID。(只使用T-SQL脚本,在查询器中操作实现,不写程序)
      

  2.   

    方法二,使用触发器。delimiter |CREATE TRIGGER Order_Trigger AFTER UPDATE ON `Order`
      FOR EACH ROW BEGIN
        UPDATE OrderDetail SET  Orderid=NEW.Orderid WHERE Orderid=OLD.Orderid ;
      END;
    |delimiter ;你的语句根本不对,建议参考MYSQL的手册中的语法。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  3.   

    我的测试脚本:
    /*-------------------批量更新订单表的inOrderID----------------------------------------declare cur_bbb cursor dynamic for
    select InOrderID from inOrder
    declare @count int,@id int
    set @id=1
    select @count=count(*) from inOrder
    open cur_bbb
    while @count>0
    begin
    fetch next from cur_bbb
    update inOrder set InOrderID=830+@id where current of cur_bbb
    set @id=@id+1
    set @count=@count-1
    end
    close cur_bbb
    deallocate cur_bbb*/
    测试结果:订单表更新成功。订单明细表的InOrderID没有跟着更新。不知道原因在那?个人举得触发器的Update语句有问题。各位帮忙看看。
      

  4.   

    where current of cur_bbb
    这句没看明白啊
      

  5.   

    create trigger trg_A
    on Order
    for update,delete
    as
    begin
        if exists(select 1 from inserted)
            update OrderDetail set inOrderID=(select inOrderID from inserted) where inOrderID=(select inOrderID from deleted)
        else
            delete OrderDetail where inOrderID=(select inOrderID from deleted)
    end
    go
    试了上面那个触发器可以用。我之前写果然有问题。
      

  6.   

    orderID不应该修改的。主键无需修改。你担心数字上限?
      

  7.   

    多谢楼上二位的关注。orderID是主键,主要改的原因是,我给别人进行数据库合并呢,所以不得不修改 了。
    事情已经搞定了,呵呵~~ 
    再次多谢楼上各位的光临和支持。特别是2楼的朋友。