Azure SQL Server 觸發器未觸發
在託管實例上使用 Azure SQL Server(即執行多個數據庫的單個伺服器,其中有問題的數據庫就是其中之一)。
我在
INSERT
表 A 上創建了一個觸發器,該觸發器將相同的數據(帶有一些按摩)插入到表 B 中。檢查
sys.triggers
表格時,似乎觸發器在那裡並且沒有被禁用。當出於測試目的對錶執行單個手動插入時,該觸發器起作用。在查看該數據庫的審計日誌時,該插入確實存在(即由觸發器創建的插入)。但是,當應用程序執行插入時,觸發器不會觸發。IE 沒有向表 B 插入任何行,並且審計日誌沒有顯示由觸發器創建的插入(即對錶 B 的插入),而是顯示對錶 A 的插入。
不確定如何進一步調試 - 歡迎提出進一步探索/解決方案的建議。
更可能的原因之一是(正如您所確認的)批量插入。預設情況下,批量插入不會觸發觸發器。當您的應用程序/程式碼設置操作時,您可以在批量插入的選項中更改此行為。
如何做到這一點可能因您的程式碼、Powershell、.Net 等的具體情況而異。但這個其他答案可能會有所幫助。 https://stackoverflow.com/questions/12366510/trigger-not-firing-for-multirow-bulk-insert
是的!如何禁用該選項?
它由權限控制。
需要 INSERT 和 ADMINISTER BULK OPERATIONS 權限。在 Azure SQL 數據庫中,需要 INSERT 和 ADMINISTER DATABASE BULK OPERATIONS 權限。此外,如果以下一項或多項為真,則需要 ALTER TABLE 權限:
存在約束且未指定 CHECK_CONSTRAINTS 選項。
存在觸發器且未指定 FIRE_TRIGGER 選項。
您使用 KEEPIDENTITY 選項從數據文件中導入身份值。
因此,撤銷或拒絕應用程序的 ALTER TABLE 權限,以防止繞過觸發器和約束。