2012-01-07 53 views
0

對於某些背景...我有一個表集合,並且我希望INSERT, UPDATE, DELETE的每個表上都有一個觸發器。 SQL Server版本是SQL 2005.創建SQL觸發器查詢以將所有列更改轉儲爲單個變量

我有一個審計表Audit,它包含一個名爲Detail的列。我的最終目標是創建一個觸發器,它將獲取其表的列的列表,從Inserted,Updated或Deleted生成動態選擇查詢,執行一些字符串連接,並將該值轉儲到列Audit

這是我在想的過程:

  1. 獲取列名在表sys.columns
  2. 從結果Inserted
  3. 的foreach行基於列名
  4. 選擇動態SQL SELECT查詢,將列值連接成單個變量
  5. 將可變數據插入Detail

所以,問題:

這是爲了完成我希望做的最好方法是什麼?還有一個更重要的問題,我該如何編寫這個查詢?

+0

你有什麼版本的SQL Server - 2000,2005,2008,2008 R2?哪個版本 - 標準版,企業版?如果不低於2008 Enterprise - 您是否檢查過CDC(Change Data Captuere)? – BartekR 2012-01-07 22:26:54

+0

@BartekR它已被更新。 – Steve 2012-01-07 22:45:23

回答

3

您可以爲此使用FOR XML,並將結果存儲爲XML文檔。

SELECT * 
FROM Inserted 
FOR XML RAW 

會給你attibute爲中心的XML和

SELECT * 
FROM Inserted 
FOR XML PATH('row') 

會給你元素爲中心的XML。比試圖識別列並連接它們要容易得多。

+0

不錯。很優雅的解決方案 – Steve 2012-01-07 23:12:24

相關問題