触发器

wangcs 2008-04-02 11:32:04
B :数据表
在A表内定义的触发器去更新B数据
触发器是Updated
Update B set
B.TotalFee=B.TotalFee-i.FeeTotal,
B.UseAmount=B.UseAmount-i.UseAmount
From Inserted i
Where B.MeterId=i.MeterId and i.InvState='1'


update A
set InvState='1'
当 A 中的meterid值相等的 记录有多条时 触发器只会执行一次 既只执行第一条 B.MeterId=i.MeterId 后面的不执行
这是为什么?
如果想要所有满足条件的都执行该怎么写?
...全文
110 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2008-04-02
  • 打赏
  • 举报
回复
好像应该满足的全更新的
areswang 2008-04-02
  • 打赏
  • 举报
回复
不应该,或者是没说清
青锋-SS 2008-04-02
  • 打赏
  • 举报
回复
不应该吧
wangcs 2008-04-02
  • 打赏
  • 举报
回复
问题明白了
谢谢大家的参与
如果 UPDATE 语句包含了未指定每个所更新列的位置只有一个可用值的 FROM 子句(换句话说,如果 UPDATE 语句是不确定性的),则其结果将不明确。例如,对于下面脚本中的 UPDATE 语句,表 s 中的两行都满足 UPDATE 语句中的 FROM 子句的限定条件,但是将用 s 的哪一行来更新表 t 内的行是不明确的。

CREATE TABLE s (ColA INT, ColB DECIMAL(10,3))
GO
CREATE TABLE t (ColA INT PRIMARY KEY, ColB DECIMAL(10,3))
GO
INSERT INTO s VALUES(1, 10.0)
INSERT INTO s VALUES(1, 20.0)
INSERT INTO t VALUES(1, 0.0)
GO
UPDATE t
SET t.ColB = t.ColB + s.ColB
FROM t INNER JOIN s ON (t.ColA = s.ColA)
GO

当组合 FROM 和 WHERE CURRENT OF 子句时,可能发生同样的问题。在本例中,表 t2 中的两行都满足 UPDATE 语句中的 FROM 子句的限定条件。将用表 t2 的哪一行来更新表 t1 中的行是不明确的。
srgcc 2008-04-02
  • 打赏
  • 举报
回复
update yu ju xie cuo le
ctoygl 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangcs 的回复:]
我试了
表table1
fd1 fd2
1 qwe
表 table2
fd1 fd2
2 qwe
3 qwe
4 qwe
1,执行
update table1
set table1.fd1=table1.fd1+table2.fd1
from table2
where table1.fd2=table2.fd2
结果:table1.fd1=5
sql 只匹配了最后一条满足条件的记录

2,执行
update table1
set table1.fd1=table1.fd1+b.fd1
from (select fd2,sum(fd…
[/Quote]

第一种写法当然只会匹配最后一条了,其实之前它是先1+2,然后1+3,最后执行1+4,所以你只看到最后的结果。
ctoygl 2008-04-02
  • 打赏
  • 举报
回复
还是没说明白,触发器在A表,更新的是B表,你应该列出B表的数据情况才对呀。
wangcs 2008-04-02
  • 打赏
  • 举报
回复
我试了
表table1
fd1 fd2
1 qwe
表 table2
fd1 fd2
2 qwe
3 qwe
4 qwe
1,执行
update table1
set table1.fd1=table1.fd1+table2.fd1
from table2
where table1.fd2=table2.fd2
结果:table1.fd1=5
sql 只匹配了最后一条满足条件的记录

2,执行
update table1
set table1.fd1=table1.fd1+b.fd1
from (select fd2,sum(fd1) as fd1 from table2 group by fd2) as b
where table1.fd2=b.fd2
结果table1.fd1=10
我想得到第2种结果
第1种写法错在哪


nextflying 2008-04-02
  • 打赏
  • 举报
回复
顶顶 , 实际数据测测
wangcs 2008-04-02
  • 打赏
  • 举报
回复
举例
A表
第一条记录 meterid=1
第二条记录 meterid=1
第三条记录 meterid=2
A 执行 update
触发器执行
第1,3 会被触发器操作
第2 则不会被操作

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧