Sql-Server
SQL Server Profile 會顯示作為我正在分析的查詢的副作用而執行的觸發器或其他程式碼嗎?
我一直在使用分析器來測試我正在執行的大量腳本,以檢查意外的副作用,例如我不知道執行的觸發器,因為我已經更新了某個表中的數據。
在探查器執行時執行了腳本,我看不到任何額外的程式碼正在執行,但我不知道這是因為沒有程式碼還是探查器由於某種原因不會顯示它!
我將配置文件限制為以下事件:
SQL:BatchCompleted
SQL:StmtCompleted
SP:Completed
我是否錯過了可能向我顯示觸發器已觸發的事件,或者我是否可以確信沒有發生任何我沒有預料到的事情?
這應該擷取任何即席 SQL 或儲存過程,任何與表關聯的觸發器都會觸發,具體取決於您的跟踪過濾器(我更擔心它擷取的內容太多,您無法篩選)。
但是有一種更簡潔、侵入性更小的方法可以知道一個表是否有與之關聯的觸發器:
SELECT [Trigger] = tr.name FROM sys.triggers AS tr INNER JOIN sys.tables AS t ON tr.parent_id = t.[object_id] WHERE t.name = N'TableName';
探查器跟踪不可靠還有多種其他原因 - 例如,觸發器目前可能被禁用,或者觸發器可能僅在某些條件為真時執行進一步的 SQL 語句。