标题:求助SQL触发器更新两个表数据问题
取消只看楼主
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
结帖率:0
已结贴  问题点数:20 回复次数:6 
求助SQL触发器更新两个表数据问题
请问,我需要在B表有数据插入,A表的GS不为0且TPYE='2'时,写触发器更B表和C表的qty的值等于A表的GS.
注:B表的ID字段有相同的数据,需要加SOURCE_ID字段才能在A表找到唯一的数据,同样在C表也需要加两个以条件才能找到唯一的数据

 表结构如下:
A表               
ID    SOURCE_ID    GS    QYT   
A1    A2            11.5      20   
                  
B表               
ID    SOURCE_ID    ORDER_ID    ORDER_RTK    QTY-1          TPYE      QTY
A1      A2                B1                 B2              20           2          20
               
C表               
ID    ORDER_ID    ORDER_RTK    QTY-1          TPEY       QTY
A1     B1               B2               20           2            20
   
触发器这样写更新不了,还请指导,谢谢!

CREATE TRIGGER [dbo].[ONT_QTY]
ON  [dbo].[B]
FOR INSERT
AS
DECLARE
 @ID  uniqueidentifier,
 @SOURCE_ID  uniqueidentifier,
 @ORDER_ID uniqueidentifier,
 @ORDER_RTK  nvarchar(200)
 BEGIN

SELECT @ID=ID,@SOURCE_ID=SOURCE_ID,@ORDER_ID=ORDER_ID,@ORDER_RTK=ORDER_RTK
FROM inserted

UPDATE B
SET B.QTY=A.GS
FROM inserted,A
WHERE  inserted.ID=A.ID
     AND inserted.SOURCE_ID=A.SOURCE_ID
     AND B.TYPE='2'
     AND A.GS<>'0'

UPDATE C
SET C.QTY=A.GS
FROM inserted,A,C
WHERE  inserted.ID=C.ID
       AND  B.ORDER_ID=C.ORDER_ID
      AND    A.GS<>'0'
      AND C.TPEY='2'
END

搜索更多相关主题的帖子: 触发器 
2016-06-15 17:30
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
得分:0 
更新B表是条件正确,但C表的条件如下:
更新C表时的条件正常的是:A.ID=C.ID
                         AND B. ORDER_ID=C. ORDER_ID
                         AND B. ORDER_RTK=C.ORDER_RTK
                         AND A.GS<>0
                         AND  C.TYPE='2'
2016-06-15 19:26
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
得分:0 
感谢版主,正如你在4楼所说的。B表有数据插入时,需要把B表和C表的QTY数量,更新为A表的GS。

B表
在A表里,通过ID和SOURCE_ID,能在B表找到唯一对应的数值。

C表

在A表,只有ID相同,不能找到唯一值。C表与B表,通过ORDER_ID和ORDER_RTK和ID,能在B表找到唯一值。

关于字段“QTY-1”错误,更正为“QTY_1”,感谢你指点。
2016-06-16 12:32
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
得分:0 
版主,这样还是没有更新到t3表,结果如下图,我也在查找原因
2016-06-17 12:59
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
得分:0 
发不了图片。
1、挂上触发器
2、t1赋值。INSERT INTO t1 (id,SOURCE_ID,GS,QYT) VALUES ('a1','f2','20','100')
3、t2和t3一起赋值。INSERT INTO t2 (ID,SOURCE_ID,ORDER_ID,ORDER_RTK,QTY_1,TPYE,qty) VALUES ('a1','f2','s201606','cc22','88','2','99')
INSERT INTO t3 (ID,ORDER_ID,ORDER_RTK,QTY_1,TPYE,qty) VALUES ('a1','s201606','cc22','88','2','99')

4、结果是,t2表的qty=20,但是t3表的qty=99,t3表没有变过来
2016-06-17 13:07
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
得分:0 
直接运行这个是可以更新的。
UPDATE t3
 SET t3.QTY=t1.GS
 FROM t1,t2,T3
 WHERE  T1.ID=T3.ID AND T1.ID='a1'
    AND T2.ORDER_ID=T3.ORDER_ID AND T3.ORDER_ID='s201606'
    AND T2.ORDER_RTK=T3.ORDER_RTK AND T3.ORDER_RTK='cc22'
    AND T1.GS<>0
   AND T3.TPYE='2'

但按我的操作步骤,更新不了。如下:
第一步:INSERT INTO t1 (id,SOURCE_ID,GS,QYT) VALUES ('a1','f2','20','100')
第二步:同时在T2和T3插入数据。
INSERT INTO t2 (ID,SOURCE_ID,ORDER_ID,ORDER_RTK,QTY_1,TPYE,qty) VALUES ('a1','f2','s201606','cc22','88','2','99')
 INSERT INTO t3 (ID,ORDER_ID,ORDER_RTK,QTY_1,TPYE,qty) VALUES ('a1','s201606','cc22','88','2','99')

这样T3表的QTY还是等于99.
2016-06-23 14:37
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
得分:0 
首先感谢版主的热心帮助!!

如16楼回复t3表是没有数据的,但你测试的时候,t3表已经有数据存在,把t3表的现有的qty=99改成了qty=10.我的环境是:同时插入t2表和t3表数据,不是只插入t2表,如下

select * from t1
select * from t2
select * from t3
INSERT INTO t2(id,source_id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','f1','s201606','cc11',88,'2',99)
INSERT INTO t3(id,source_id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','f1','s201606','cc11',88,'2',99)
 select * from t2
 select * from t3


2016-06-24 19:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-465986-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.187528 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved