2012-01-07 3 views
0

いくつかの背景について...私はテーブルのコレクションを持っており、各テーブルのトリガをINSERT, UPDATE, DELETEにしたいと考えています。 SQL ServerのバージョンはSQL 2005です。すべての列の変更を1つの変数にダンプするSQLトリガクエリを作成する

Detailという列を含む監査テーブルAuditがあります。私の最終目標は、テーブルの列のリストを取得し、挿入、更新、または削除のいずれかから動的選択クエリを生成し、文字列連結を行い、その値をのDetail列にダンプするトリガーを作成することです。

これは私が考えていたプロセスです。

  1. sys.columns
  2. のためにテーブルの列名を取得するカラム名
  3. に基づいて動的SQL SELECTクエリが結果にInserted
  4. foreachの行から選択して生成します列の値を1つの変数に連結する
  5. 可変データをDetail列に挿入する

ので、質問:

が、これは私が何を探しているものを達成するための最良の方法ですか?もう少し重要な質問ですが、どのようにこのクエリを書くのですか?

+0

2000、2005、2008、2008R2のどのバージョンのSQL Serverをお使いですか? Standard、Enterpriseのどのエディション? 2008 Enterprise未満の場合 - CDC(Change Data Captureuere)をチェックしましたか? – BartekR

+0

@BartekR更新されました。 – Steve

答えて

3

これはFOR XMLを使用して、結果をXMLドキュメントとして保存するだけです。

SELECT * 
FROM Inserted 
FOR XML RAW 

はあなたにattibute中心のXMLを与えるだろう、と

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

はあなたの要素中心のXMLを提供します。列を識別して連結するよりもずっと簡単です。

+0

ニース。非常にエレガントなソリューション! – Steve

関連する問題