从表数据不能保存(150分)

  • 主题发起人 thgerman
  • 开始时间
T

thgerman

Unregistered / Unconfirmed
GUEST, unregistred user!
sql server 2000数据库,主从表结构(是在程序中控制的)
我的主表有一个触发器,插入数据后判断插入的数据是否正常,如有异常向另
一数据库的数据异常表中写入数据。
问题是如表触发器不触发主从表的数据都能顺利保存,但如果主表的触发器工作,那么
从表就接收不到数据(主表数据正常)

请教各位大侠了
 
你干脆用一个存储过程,在事务中控制吧
 
to ehgerman:
不是很清楚你为什么这样做。
出现了异常,为何还要写数据到从表,要不要写主表呢?
你可以在你的触发器中进行处理啊。比如出错时就向从表中写数据,
不可以吗?要不开启一个事务,出错时,不进行回滚。相反进行提交。

试试看看。
 
具体情况是这样,刚开始主表并没有用触发器,触发器是以后加的,作用是将其中有问题的
记录筛选出来写入另一个库的一个表中(那个库是网页的后台数据库)并不是真正的异常数
据。主从表的数据是由客户端提交上来的,它的结构是在客户端程序设置的,在触发器不工
作的时候,主从表保存数据都很正常,但如果触发器一工作(此时主表的数据已经保存),
从表的数据就不保存了,这是为什么??
 
to thgerman 兄:

你的数据是先写入主表然后再写入从表的,是吗?
你的问题,我想是由数据库的事务机制造成的。
在更新主从表数据时,即使你没有调用启动事务函数,数据库也已经为你开启了一个事务。
触发器不工作时,如果数据没有出错,当然可以保存数据的。
触发器工作时,你在触发器内涉及到另一个表的数据更新,数据库又启动了
一个事务,同时会中断原来的事务,由于负责主从表数据更新的事务已经中断退出,
从表的数据就不会再保存了。
建议你先保存从表的数据,然后在你的触发器中,再次写入其中。

还有,刚才请教了一个高手,对你的触发器的功能有怀疑。你能不能确认一个
你的触发器执行了吗?如果你的触发器是 before insert类型的,那么根本不会
检测是否主表出错,因为这时数据还没有插入。如果是after insert类型的。一旦出错后,你的触发器是
不会启动的。所以可能你的触发器思想有点问题。

 
to pcc_mmz1
谢谢大侠的教导,你说的很有道理,我也有这种感觉。

致于触发器的功能,可能我的思路有问题,它并不是用来执行数据约束的,
我用的触发器是atfer insert类型,能够正常启动,但一启动,提交的从表记录就不见了:(

有没有方法解决这个问题呢?
 
>>有没有方法解决这个问题呢?
先保存从表呀?!
 
触发器的启动不会影响你的提交的。
它更新另一个表的数据有没有成功?我想可能是你的触发器工作错误,
然后ROLLBACK了事务。

pcc_mmz1兄说的触发器启动时更新另一个表的数据时
启动事务的说法不正确,它没有启动新事务,比如你在触发器中加COMMIT是不能成立的。

如果你的触发器工作没有错误,而从表没有记录,那你把插从表的工作移到触发器中好了,
(不过我想不应该会这样,^_^)
 

问题解决了吗?应该可以发分了!!!
 
多人接受答案了。
 
顶部