假设有2个表:表测试和表test_copy。我在表测试中有一个插入触发器,它插入表test_copy中,我有一个存储过程,用于在表测试中插入。
我正在通过存储过程在测试中进行一些批量插入。说有7条记录。如果第6条记录中有错误,我希望测试中的整个事务回滚,但test_copy要保存5条记录。
如何在Sybase ASE中实现此目的? 如果我在链接模式下声明触发器并以非链接模式声明存储过程,这是否可以实现?
答案 0 :(得分:1)
在触发器中执行的操作被视为修改父表(触发器定义在其上)的同一事务的一部分。
如果您将记录插入测试表,并且测试表的insert触发器执行对test_copy表的插入,那么就无法将两组插入分开,即它们被视为一个单独的工作单元:
如果要将两组插入(1组设置为test; 1设置为test_copy)视为单独的工作单元,则需要将test_copy的插入作为单独的独立插入语句执行(例如,存储过程必须运行insert test/select from #table
和insert test_copy/select from #table
)。
虽然Sybase ASE允许以编程方式更改事务模式(链接与非链接),但此设置应用于会话级别而不是事务级别;最终结果是您不能将链接和非链接的事务嵌套在彼此之中。