聲明:我無法在應用程序中正確實現它,因爲我正在處理的應用程序不會以一致的方式執行數據訪問,並且重構工作對於項目範圍和截止日期的限制太大。SQLCLR觸發器或審計跟蹤存儲過程的可行性?
我該如何執行SQLCLR觸發器進行審計跟蹤?我希望它儘可能簡單,,並儘可能容易地刪除和替換適當的實施。
我計劃我的審計寫入一個表(數據庫也不是很沉重的寫),有喜歡的列:
- 時間戳(
datetime
) - 當變化發生了什麼? - 用戶名(
varchar
) - 誰進行了更改? - AffectedTableName(
varchar
) - 哪張表受到了影響? - AffectedRowKey(
varchar
) - 這將是要麼喜歡(Id=42
,A=4,B=2
)的簡單或複合鍵 - OperationType(
char(1)
) - 要麼I
,U
或D
用於插入,更新和刪除分別。 - InsertedXml(
xml
) - XML序列化行(SELECT * FROM INSERTED FOR XML AUTO
) - DeletedXml(
xml
) - XML序列化行(SELECT * FROM DELETED FOR XML AUTO
)
我打算查詢和這個數據解析爲一個用戶在應用程序中可讀的形式。我打算將此作爲一個使用SQLCLR編寫的數據庫觸發器來實現。我可以看到2種可能的方法:
- 實現此完全作爲SqlTrigger方法:
- 實現此作爲SqlProcedure方法服用參數:
- SCHEMANAME
- TABLENAME
- insertedXml
- deletedXml
我會很感激任何建設性的批評和建議。我的限制是我必須使用觸發器在數據庫級別實施審計,並且我希望它儘可能可維護(可讀取:可移動和可替換)。理想情況下,我不想擁有數百個完全相同的觸發器,以防我需要修改它們。
將「@ sql」移到while循環的外面,並將其替換爲插入和刪除的變量,然後在while循環之後僅使用插入和刪除變量(例如上面的模式)來僅取出一次'@ sql'。對不起,但我沒有時間超過這個小提示...祝你好運。 – ShaneBlake
謝謝,我會盡力的。 –