2017-06-20 71 views
0

假設有2個表:Table test和Table test_copy。我在Table test中插入了一個插入觸發器,它在表test_copy中插入,我有一個存儲過程用於在Table test中插入。可以在Sybase ASE的非鏈式事務中執行鏈式事務嗎?

我正在做一些批量插入測試通過存儲過程。假設有7條記錄。如果第6條記錄有錯誤,我希望測試中的整個事務回滾,但test_copy保存5條記錄。

如何在Sybase ASE中實現此目的? 如果我在鏈式模式下聲明觸發器並且在非鏈式模式下存儲過程,這可以實現嗎?

+0

你是什麼意思,通過'存儲過程的批量插入?你是否爲每個插入的記錄調用proc一次? – markp

+0

編號說,我有一個臨時表與多個記錄,並通過存儲過程傳遞臨時表。 – riyaB

回答

1

在觸發器內執行的操作被視爲修改父表(即定義觸發器)的同一事務的一部分。

如果將記錄插入到測試表中,並且測試表的插入觸發器將插入操作執行到test_copy表中,那麼無法分開兩組插入,即它們被視爲單個單元工作:

  • 提交插入測試和您提交插入到test_copy
  • 回滾imserts測試和你回滾插入到test_copy

如果你要正確對待兩套插入(1組測試; 1組測試test_copy)作爲單獨的工作單元,那麼您需要將test_copy的插入作爲單獨的獨立插入語句執行(例如,存儲的proc將不得不運行insert test/select from #tableinsert test_copy/select from #table)。


雖然Sybase ASE的確實允許編程改變所述事務模式(鏈接VS非鏈式),此設置將在會話級,而不是在事務級應用;最終的結果是你不能將鏈式和非鏈式事務嵌套在一起。

相關問題