标题:求助SQL触发器更新两个表数据问题
只看楼主
koko2016
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-15
结帖率:0
已结贴  问题点数:20 回复次数:18 
求助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
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:20 
条件:
A.ID=B.ID AND A.SOURCE_ID=B.SOURCE_ID AND A.GS<>0 AND B.TYPE='2'
A.ID=C.ID AND A.SOURCE_ID=C.SOURCE_ID AND A.GS<>0 AND C.TYPE='2'

更新:B.QYT=A.GS C.QYT=A.GS
是这样吗?
2016-06-15 17:52
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
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
我需要在B表有数据插入,A表的GS不为0且TPYE='2'时,写触发器更B表和C表的qty的值等于A表的GS.
触发的条件:B表有数据插入
触发器干活:更新B表,更新C表
感觉你逻辑有点问题阿。B表有数据插入,怎么还要更新B表

2016-06-16 09:52
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
表结构如下:
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
你这有2个错误,字段不要用“-”,红色的,B表那里是 TPYE,C表那里是TPEY

[此贴子已经被作者于2016-6-16 11:29编辑过]

2016-06-16 11:28
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
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
--update_t2_t3,对应你的ONT_QTY,t1,t2,t3对应你的A,B,C表,测试是可以更新的,但好像你的数据关系有问题,更新不对的。
CREATE TRIGGER [dbo].[update_t2_t3]
ON  [dbo].[t2]
FOR INSERT
AS
DECLARE
 @ID1 varchar(10),
 @SOURCE_ID1 varchar(10),
 @ORDER_ID1 varchar(10),
 @ORDER_RTK1 varchar(10)
BEGIN
SELECT @ID1=ID,@SOURCE_ID1=SOURCE_ID,@ORDER_ID1=ORDER_ID,@ORDER_RTK1=ORDER_RTK FROM inserted

UPDATE t2
SET t2.QTY=t1.GS
FROM inserted,t1
WHERE inserted.ID=t1.ID
      AND inserted.SOURCE_ID=t1.SOURCE_ID
      AND t2.TPYE='2'
      AND t1.GS<>'0'

UPDATE t3
SET t3.QTY=t1.GS
FROM inserted,t1,t3
WHERE  inserted.ID=t3.ID
       AND inserted.ORDER_ID=t3.ORDER_ID
       AND t3.TPYE='2'
       AND t1.GS<>'0'
END
2016-06-16 14:58
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 

--drop table t1
--create table t1(ID varchar(10),SOURCE_ID varchar(10),GS numeric(10,2),QYT numeric(10,2))
--create table t2(ID varchar(10),SOURCE_ID varchar(10),ORDER_ID varchar(10),ORDER_RTK varchar(10),QTY_1 numeric(10,2),TPYE varchar(4),QTY numeric(10,2))
--create table t3(ID varchar(10),ORDER_ID varchar(10),ORDER_RTK varchar(10),QTY_1 numeric(10,2),TPYE varchar(4),QTY numeric(10,2))

--update_t2_t3,对应你的ONT_QTY,t1,t2,t3对应你的A,B,C表,好像没问题了,你用你的数据测试看看

CREATE TRIGGER [dbo].[update_t2_t3]
ON  [dbo].[t2]
FOR INSERT
AS
DECLARE
 @ID1 varchar(10),
 @SOURCE_ID1 varchar(10),
 @ORDER_ID1 varchar(10),
 @ORDER_RTK1 varchar(10)
BEGIN
SELECT @ID1=ID,@SOURCE_ID1=SOURCE_ID,@ORDER_ID1=ORDER_ID,@ORDER_RTK1=ORDER_RTK FROM inserted
--这里变量改为@ID1,@SOURCE_ID1,@ORDER_ID1,@ORDER_RTK1,区分你表的字段名称
UPDATE t2
SET t2.QTY=t1.GS
FROM t1,T2
WHERE T1.ID=T2.ID AND T1.ID=@ID1
  AND T1.SOURCE_ID=T2.SOURCE_ID AND T1.SOURCE_ID=@SOURCE_ID1
  AND T1.GS<>0
  AND T2.TPYE='2'

UPDATE t3
SET t3.QTY=t1.GS
FROM t1,t2,T3
WHERE  T1.ID=T3.ID AND T1.ID=@ID1
   AND T2.ORDER_ID=T3.ORDER_ID AND T3.ORDER_ID=@ORDER_ID1
   AND T2.ORDER_RTK=T3.ORDER_RTK AND T3.ORDER_RTK=@ORDER_RTK1
   AND T1.GS<>0
   AND T3.TPYE='2'
END
2016-06-16 15:27
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



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




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

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