在SQL SERVER2000中如何实现两个表的联系?例如,当借用表的借用数量发生变化时,对应的库存信息表中的库存数量作相应的减少?当借用数量等于库存数量或大于库存数量时删除库存信息中的该条信息谢谢,急!!!

解决方案 »

  1.   

    触发器
    看看以下文章http://blog.csdn.net/Haiwer/archive/2008/10.aspxhttp://blog.csdn.net/Haiwer/archive/2008/10/04/3016300.aspx
      

  2.   

    http://blog.csdn.net/Haiwer/archive/2008/10/04/3016283.aspx
      

  3.   


    这个很简单吧.写两条更新SQL放到借用表的Trigger中就可以做到了。
      

  4.   

    触发器 ,或者显式的写几条sql语句。
      

  5.   


    帖出表结构、Sample数据、及所需结果。
      

  6.   

    CREATE  table #T(name varchar(10),QTY FLOAT) 
    CREATE  table #TT(name varchar(10),QTY FLOAT) 
    --库存
    insert #T select '121', 20
    insert #T select '122', 30
    insert #T select '123',40
    insert #T select '124',20
    --借用insert #TT select '122', 20
    insert #TT select '123', 50
    这样的数据,使其用了触发器#T中'122'的行变成'122',10
                         #T中'123'的行删除并且提示库存中只有40件,您只能借用40件.#TT表中'123'行也变成 '123',40
    谢谢 帮忙!
      

  7.   


    CREATE  table T(name varchar(10),QTY FLOAT) 
    CREATE  table TT(name varchar(10),QTY FLOAT) 
    --库存 
    insert T select '121', 20 
    insert T select '122', 30 
    insert T select '123',40 
    insert T select '124',20 
    gocreate trigger tri_#tt on tt instead of insert
    as

    insert into tt select a.name,case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b 
    where a.name=b.name
    if exists(select 1 from inserted a,t b where a.name=b.name and a.QTY>b.QTY)
    raiserror('库存不够',16,1)
    go--借用 insert TT select '122', 20 
    insert TT select '123', 50 --查看结果
    select * from tt
      

  8.   

    上面应该还借用后,减少库存表的库存才对```
    CREATE  table T(name varchar(10),QTY FLOAT) 
    CREATE  table TT(name varchar(10),QTY FLOAT) 
    --库存 
    insert T select '121', 20 
    insert T select '122', 30 
    insert T select '123',40 
    insert T select '124',20 
    gocreate trigger tri_#tt on tt instead of insert
    as

    insert into tt select a.name,case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b 
    where a.name=b.name
    update t set Qty=b.QTY-case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b 
    where a.name=b.name
    if exists(select 1 from inserted a,t b where a.name=b.name and a.QTY>b.QTY)
    raiserror('库存不够',16,1)
    go--借用 insert TT select '122', 20 
    insert TT select '123', 50 select * from ttselect * from t
      

  9.   


    CREATE  table T(name varchar(10),QTY FLOAT)
    CREATE  table TT(name varchar(10),QTY FLOAT)
    --库存
    insert T select '121', 20
    insert T select '122', 30
    insert T select '123',40
    insert T select '124',20GO
    CREATE TRIGGER trgIns 
    ON TT
    FOR INSERT
    AS
    BEGIN
    UPDATE TT
    SET QTY=CASE WHEN a.Qty>b.Qty 
    THEN b.Qty
    ELSE a.Qty
    END
    FROM  TT a,T b,inserted c
    WHERE a.name=c.name
    AND a.name=b.name UPDATE T
    SET  QTY=CASE WHEN a.QTY>=b.Qty 
    THEN a.Qty-b.Qty
    ELSE 0
    END
    FROM T a,inserted b
    WHERE  a.name=b.name
    END
    GO
    --借用
    insert TT select '122', 20
    insert TT select '123', 50 SELECT * FROM T/*
    name       QTY                                                   
    ---------- ----------------------------------------------------- 
    121        20.0
    122        10.0
    123        0.0
    124        20.0
    */SELECT * FROM TT
    /*
    name       QTY                                                   
    ---------- ----------------------------------------------------- 
    122        20.0
    123        40.0
    */DROP TABLE T,TT
      

  10.   

    CREATE  table T(name varchar(10),QTY FLOAT) 
    CREATE  table TT(name varchar(10),QTY FLOAT) 
    --库存 
    insert T select '121', 20 
    insert T select '122', 30 
    insert T select '123',40 
    insert T select '124',20 
    gocreate trigger tri_#tt on tt instead of insert
    as
        
        insert into tt select a.name,case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b 
        where a.name=b.name
        update t set Qty=b.QTY-case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b 
        where a.name=b.name
        delete t where qty=0
        if exists(select 1 from inserted a,t b where a.name=b.name and a.QTY>b.QTY)
            raiserror('库存不够',16,1)
    go--借用 insert TT select '122', 20 
    insert TT select '123', 50 select * from ttselect * from t
      

  11.   

    raiserror('库存不够',16,1)中的16,1是什么意思呢