链接事务是否可以在Sybase ASE中的非链接事务中实现?

时间:2017-06-20 11:22:45

标签: transactions sybase-ase

假设有2个表:表测试和表test_copy。我在表测试中有一个插入触发器,它插入表test_copy中,我有一个存储过程,用于在表测试中插入。

我正在通过存储过程在测试中进行一些批量插入。说有7条记录。如果第6条记录中有错误,我希望测试中的整个事务回滚,但test_copy要保存5条记录。

如何在Sybase ASE中实现此目的? 如果我在链接模式下声明触发器并以非链接模式声明存储过程,这是否可以实现?

1 个答案:

答案 0 :(得分:1)

在触发器中执行的操作被视为修改父表(触发器定义在其上)的同一事务的一部分。

如果您将记录插入测试表,并且测试表的insert触发器执行对test_copy表的插入,那么就无法将两组插入分开,即它们被视为一个单独的工作单元:

  • 提交插入测试并将插入提交到test_copy
  • 回滚imsert以进行测试,然后将插入回滚到test_copy

如果要将两组插入(1组设置为test; 1设置为test_copy)视为单独的工作单元,则需要将test_copy的插入作为单独的独立插入语句执行(例如,存储过程必须运行insert test/select from #tableinsert test_copy/select from #table)。

虽然Sybase ASE允许以编程方式更改事务模式(链接与非链接),但此设置应用于会话级别而不是事务级别;最终结果是您不能将链接和非链接的事务嵌套在彼此之中。