SQLSERVER触发器UPDATE问题_多条记录但是只执行了一次

whxxr 2013-12-03 04:24:42
写了一个触发器,当一张表的'记账'字段UPDATE之后更新

更新记账的语句写法如下:
先将选择的记录插入了一张临时表中,
insert into 临时表(lsbh,djbh) from (0001,'13010001')
insert into 临时表(lsbh,djbh) from (0002,'13010002')

update A set 记账=1 where A.流水号 in (select lsbh from 临时表)

触发器开始是这样写的
CREATE TRIGGER TR_kcckd1_kcjz ON KCCKD1
FOR update
AS
declare @error int
DECLARE @JZBZ VARCHAR(1) /*记账标志*/
declare @LSBH varchar(40) /*流水编号*/


IF UPDATE(KCCKD1_KCJZ)
BEGIN
/*设置JZBZ,LSBH,BMBH变量*/
SELECT @JZBZ=inserted.KCCKD1_KCJZ from inserted
SELECT @LSBH=inserted.KCCKD1_LSBH from inserted
SELECT @bmbh=inserted.KCCKD1_BMBH from inserted
SELECT @ckbh=inserted.KCCKD1_CKBH from inserted
set @error=0

......

END

现在问题是如果单据一张一张的记账没有问题,触发器可以正确执行
如果选取多张单据之后,不管2张还是更多,UPDATE只执行了一次.
我觉得按理应该执行二次.0001 流水号被UPDATE之后应该触发一次.
0002流水号被UPDAE之后也应该触发一次.请各们大侠们帮忙看看是哪的原因吧.谢谢啦.
**上述红字部分是别的程序设计的,无权更改.只能更改触发器.
...全文
1823 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-12-03
  • 打赏
  • 举报
回复
改成这样:



CREATE TRIGGER  TR_kcckd1_kcjz ON KCCKD1
 FOR update
 AS


IF UPDATE(KCCKD1_KCJZ)
 BEGIN
 /*设置JZBZ,LSBH,BMBH变量*/

    set @error=0
    
 --通过表的关联,一次处理多条数据   
SELECT KCCKD1_KCJZ,KCCKD1_LSBH,KCCKD1_BMBH ,KCCKD1_CKBH 
from inserted
inner join 你的表
        on 关联条件
 ......

 END
LongRui888 2013-12-03
  • 打赏
  • 举报
回复
哦这个是因为,sql server的触发器不是行触发器,不会因为你一次update了10行,就触发器10次,而是只有1次,因为他是一个update语句。 另外,建议你不要select 变量= 值 from inserted 这样来写,因为有多条数据,肯定就不行了
Yole 2013-12-03
  • 打赏
  • 举报
回复
你想在触发器里触发什么? 直接写就OK了。
CREATE TRIGGER  TR_kcckd1_kcjz ON KCCKD1
 FOR update
 AS
 declare @error int
 DECLARE @JZBZ VARCHAR(1) /*记账标志*/
declare @LSBH varchar(40) /*流水编号*/


IF UPDATE(KCCKD1_KCJZ)
 BEGIN
 /*设置JZBZ,LSBH,BMBH变量*/
SELECT @JZBZ=inserted.KCCKD1_KCJZ from inserted
 SELECT @LSBH=inserted.KCCKD1_LSBH from inserted
 SELECT @bmbh=inserted.KCCKD1_BMBH from inserted
 SELECT @ckbh=inserted.KCCKD1_CKBH from inserted
    set @error=0

 ......

 END
这些都是啥?
lzw_0736 2013-12-03
  • 打赏
  • 举报
回复
x

update a set 字段=b.字段
from 表 a
join inserted b on 关联条件
whxxr 2013-12-03
  • 打赏
  • 举报
回复
更新记账的语句写法如下: 先将选择的记录插入了一张临时表中, insert into 临时表(lsbh,djbh) from (0001,'13010001') insert into 临时表(lsbh,djbh) from (0002,'13010002') update A set 记账=1 where A.流水号 in (select lsbh from 临时表)

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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