2009-09-04 14 views
3

は、どこでもこの操作を行う方法を見つけることができないようです。私は更新プログラムを起動するSQLトリガを持っています。トリガは、アップデートに関するいくつかの詳細を、他の誰かがプログラムで使用するテーブルにコピーします。渡される詳細の中には、更新された列の名前があります。そこに更新されている多くの、多くの、潜在的な列(一つだけいずれかの時点ではあるが)、私はちょうどのようなもの使用することができますSQL更新トリガの列名

IF UPDATE(ThisColumn) 
BEGIN 
    Do stuff with ThisColumn 
END 
IF UPDATE(ThatColumn) 
BEGIN 
    Do same stuff with ThatColumn 
END 

をしかし、私はそこに多くの列がこのテーブルにあり、I言ったように基本的に同じIF文のページを入力せずに更新された列の名前を取得するには、丁寧なやり方が必要です。

ありがとうございます!

+0

My _first_は、インストール時にデータ辞書とif文のテンプレートを使用してトリガーを書き込むコードです。しかし、今朝のコード例を書く時間はありません。 GBNのアプローチは、私が知っていたものではなく、かなり強力なので、私はそれを調べるだろう。 –

答えて

2

あなたはここで得られた数はsys.columns.column_id私は例の作業持っていた

にマップではなく、それ以上

巨大な落とし穴COLUMNS_UPDATED

Example usage 1, database journal

Example usage 2, KB 232195 を使用することができますのため、 metadata visibility、sys.columnsへの結合が失敗することがあります。これは、呼び出しがストアドプロシージャにラップされている場合に特に重要です。トリガーで "EXECUTE AS OWNER"を使用する必要があります