我們正在使用SQL Server CE數據庫。我知道使用SQL Server CE數據庫的觸發器的類型有限制。例如,SQL Server CE表上的觸發器不能調用存儲過程,但可以更新/插入到另一個表中。爲什麼SQL Server CE不允許觸發此觸發器?
我們所追求的是在表格中存在修改(插入/更新/刪除)時發送電子郵件通知的觸發器。我們知道,如果我們直接在表上設置觸發器來發送電子郵件(EXEC msdb.dbo.sp_send_dbmail),那麼當您嘗試推送到表時,您將遇到錯誤。顯然,SQL Server CE不支持觸發存儲過程的跟蹤表上的觸發器。
爲了解決這個問題,我們在表上設置一個觸發器,將行插入到另一個表(_table_changes)中,該表不作爲CE同步的一部分進行跟蹤。在這個表格(_table_changes)中,我們設置了一個觸發器來發送電子郵件通知,我們希望能夠解決跟蹤的CE表格觸發器無法觸發存儲過程以及電子郵件的問題。
但是,即使該表不是推/拉同步的一部分,但如果我們啓用電子郵件觸發器,同步將無法工作。爲什麼是這樣? CE如何才能意識到一個不屬於同步的表有觸發器,觸發存儲過程發送電子郵件?
儘管更新表的觸發器工作正常,但不影響同步。 如果我們直接在SSMS中編輯表格,而不是在RDA模式下編輯表格,則電子郵件觸發器可以正常工作。這就是爲什麼我很困惑,因爲觸發器不被支持,但仍然在某些情況下工作,甚至直接在SSMS中工作,但不是當我們的應用程序同步時。 – kafka 2012-03-15 10:33:49
@kafka:RDA從桌面上觸發的數據是從哪裏觸發的? SQL CE不支持觸發器,所以我有點困惑。 – codingbadger 2012-03-15 10:44:29
這是事實:我們在RDA推/拉(讓我們稱之爲用戶)的桌子上有觸發器。他們只執行插入/更新/刪除,並且我們得到用戶的觸發器插入另一個表(_table_changes)。儘管RDA顯然不支持觸發器,並且用戶是被跟蹤的表,但這種方式絕對沒問題。 然後,我們在_table_changes上觸發一個在RDA中未跟蹤的觸發器,用於在更新時通過用戶表上的觸發器發送電子郵件。混淆寫作,希望它是有道理的。如果我們手動編輯,這個觸發器在SSMS中工作正常,但是阻止RDA推送給用戶。 – kafka 2012-03-15 11:13:03