我在Sybase ASE數據庫中有兩個觸發器,它們在對兩個表進行更新時觸發:Docs和Trans。在什麼情況下不會調用Sybase觸發器?
觸發器的定義如下所示:
對於文檔:
CREATE TRIGGER dbo.Index_Change_Docs
ON dbo.docs
FOR INSERT,UPDATE AS
IF UPDATE(DOCTYPE) OR UPDATE(BATCH_NO) OR UPDATE(SCANDATE) OR
UPDATE(PERIOD_START_DATE) OR UPDATE(PERIOD_END_DATE)
OR UPDATE(DISPATCH_ID) OR UPDATE(DISPATCH_NAME) OR UPDATE(CHECKNUM) OR
UPDATE(CHECKAMT)
BEGIN
INSERT INTO
DOCID_SYNC (IS_DOC_ID, CRTN_DT, SYNC_STATUS_CDE)
SELECT Inserted.DOCID, GETDATE(), "N" FROM Inserted
END
反式:
CREATE TRIGGER dbo.Index_Change_Trans
ON dbo.Trans
FOR INSERT,UPDATE AS
IF UPDATE(TRANSNUM) OR UPDATE(CONTRACT) OR UPDATE(FRANCHISE) OR UPDATE(SSN) OR
UPDATE(STATE_CODE) OR UPDATE(TRANSTYPE)
OR UPDATE(AGENCYNUM) OR UPDATE(LOCKBOXBATCHNUM) OR UPDATE(PRODUCTCODE)
BEGIN
INSERT INTO
DOCID_SYNC (IS_DOC_ID, CRTN_DT, SYNC_STATUS_CDE)
SELECT DOCID, GETDATE(), "N" FROM DOCS
WHERE Transnum = (SELECT Inserted.TransNum from Inserted)
END
看來這些觸發器的行爲是不同的,這取決於如何更新對那些表做出。
在一種情況下,這些表通過兩個存儲過程(Insert_Docs_SP和Insert_Trans_SP)進行更新。發生這種情況時,每次觸發器都會觸發一次(文檔一次,Trans一次),一切按預期工作。
在另一種情況下,這些表在具有兩個數據庫更新的Sybase事務中更新。這裏,第一次更新通過調用應用程序中的內聯SQL完成(它觸發Trans觸發器)。第二次更新通過存儲過程 - Insert_Docs_SP完成,與其他情況相同 - 不觸發觸發器。
也許有關於如何處理我不理解的交易的事情?
存儲過程正在更新觸發器中的列(我更新了上述與存儲過程相關的問題。)在這兩種情況下,存儲過程都插入新記錄。 – Timbuck 2011-06-16 20:13:38
如果您有權訪問dev/test env't中的代碼,請嘗試運行SP並查看是否執行了觸發器。 – 2011-06-16 20:19:37
單獨運行SP實際上是執行觸發器。 – Timbuck 2011-06-17 01:22:46