| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3834 人关注过本帖
标题:求助SQL触发器更新两个表数据问题
只看楼主 加入收藏
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
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'
INSERT INTO t1 (id,SOURCE_ID,GS,QYT) VALUES ('a1','f2','20','100')
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')
更新T2:a1=a1,f2=f2,gs=100,tpye='2',条件符合,
更新T3:a1=a1,s201606=s201606,cc22=cc22,gs=100,tpye='2',条件也符合,
应该2个表都会更新阿。
2016-06-17 13:48
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分: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'
2016-06-17 13:50
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
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我晚上再理一下!
2016-06-23 16:52
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
--建立表和初始数据
drop table t1
drop table t2
drop table t3
go
create table t1(id varchar(10),source_id varchar(10),gs numeric(10,2),qty 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))
go
INSERT INTO t1 (id,source_id,gs,qty) VALUES ('a1','f1',10,100)
INSERT INTO t1 (id,source_id,gs,qty) VALUES ('a1','f2',20,200)
INSERT INTO t1 (id,source_id,gs,qty) VALUES ('a1','f3',30,300)

INSERT INTO t3(id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','s201606','cc11',88,'2',99)
INSERT INTO t3(id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','s201606','cc22',88,'2',99)
INSERT INTO t3(id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','s201606','cc33',88,'2',99)
select * from t1
select * from t2
select * from t3
--建立触发器,不能和上面的一起执行
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 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=t2.id AND t2.id=t3.id AND t1.id=@id1
  AND t1.source_id=t2.source_id AND t1.source_id=@source_id1
  AND t2.order_id=t3.order_id AND t2.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-6-24 15:14编辑过]

2016-06-24 15:05
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
--测试
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)
select * from t2
select * from t3
--插入数据前后对比
图片附件: 游客没有浏览图片的权限,请 登录注册

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','f3','s201606','cc33',88,'2',99)
select * from t2
select * from t3
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-24 15:10
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
经过3轮在 T2表上插入数据,最后结果都更新了.
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-24 15:22
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
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用koko2016在2016-6-24 19:19:00的发言:

首先感谢版主的热心帮助!!

如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
你T3没更新是由于你触发器,只关联T2
你把你插入语句顺序倒过来就可以了。
--先插入T3,这样在插入T2时,就触发,就会更新T3
INSERT INTO t3(id,source_id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','f1','s201606','cc11',88,'2',99)
INSERT INTO t2(id,source_id,order_id,order_rtk,qty_1,tpye,qty) VALUES ('a1','f1','s201606','cc11',88,'2',99)

2016-06-25 00:41
快速回复:求助SQL触发器更新两个表数据问题
数据加载中...
 
   



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

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