看来不用触发是有点麻烦,如果用触发怎样写 我下面的语句有问题吗,好象不起作用 SELECT @nCount = COUNT(*) FROM DELETED IF (@nInsRows > 0 AND @nCount = 0) --is insert update b set b.dglsl=b.dglsl-i.dsl from dc_htdd b,inserted i where i.dhtbm=b.dhtbm and i.dcpbm=b.dhtbm IF (@nInsRows > 0 AND @nCount > 0) -- is update update b set b.dglsl=b.dglsl-(d.dsl-i.dsl) from htdd b,inserted i,deleted d where i.dhtbm =b.dhtbm and i.dhtbm=b.dcpbm and d.dhtbm=b.dhtbm and d.dhtbm =b.dcpbm IF (@nInsRows = 0 AND @nCount > 0) --is insert update b set b.dglsl=b.dglsl+d.dsl from htdd b,deleted d where d.dhtbm=b.dhtbm and d.dcpbm=b.dhtbm end
2,可先将表1中增加、修改、删除的记录存入临时表,临时表增加一个标志字段,存储所做得操作“增加”,“修改”,“删除”;
3.很多记录操作完毕,在进行提交操作。
4。提交:将临时表中的所有记录按照标志字段,对表1进行处理,并对表2相应的记录进行处理。
5。全成功,则确认事物
6。出错则回滚事物,恢复修改.
我下面的语句有问题吗,好象不起作用
SELECT @nCount = COUNT(*) FROM DELETED
IF (@nInsRows > 0 AND @nCount = 0) --is insert
update b set b.dglsl=b.dglsl-i.dsl from dc_htdd b,inserted i
where i.dhtbm=b.dhtbm and i.dcpbm=b.dhtbm
IF (@nInsRows > 0 AND @nCount > 0) -- is update
update b set b.dglsl=b.dglsl-(d.dsl-i.dsl)
from htdd b,inserted i,deleted d
where i.dhtbm =b.dhtbm and i.dhtbm=b.dcpbm and d.dhtbm=b.dhtbm and d.dhtbm =b.dcpbm
IF (@nInsRows = 0 AND @nCount > 0) --is insert
update b set b.dglsl=b.dglsl+d.dsl from htdd b,deleted d
where d.dhtbm=b.dhtbm and d.dcpbm=b.dhtbm
end