2016-07-01 4 views
0

TSQLでは、カラムの値が変更されているかどうかを検出できますか?任意の列が変更されたが、特定の列(created_at)が変更された唯一のものであれば、何も挿入しないでください。特定のカラムが1つしかない場合を除いて、カラムが変更された場合は挿入

私はこれを持っているが、それはまだたびに挿入し、でもそれは何も何かがcreated_at以外の任意の列から変更された場合、私は唯一の挿入することができますどのように

BEGIN 
INSERT INTO dbo.Changes (
      [name] 
      --... other columns 
      [created_at] 
     ) 
SELECT 
      ins.[name], 
      ins.[created_at]     
FROM INSERTED ins 
WHERE 
     [name] != ins.[name] OR 
     [age] != ins.[age] 

を変更しなかったのか?あなたのロジックが正しくNULL値を処理しないこと

SELECT ins.[name], ins.[created_at]     
FROM INSERTED ins JOIN 
    DELETED del 
    ON ins.id = del.id 
WHERE del.[name] <> ins.[name] OR 
     del.[age] <> ins.[age]; 

注:あなたのテーブルを想定し

おかげ

答えて

1

はあなたが行うことができます主キーを持っています。

UPDATE()を使用すると、DELETEDなしで同様のロジックを実行することもできます。しかし、これは、insertedのセット全体で動作し、行単位では動作しないため、奇妙な機能です。したがって、列がSET句内にある場合、値が変更されない場合でも列は「更新済み」と呼ばれます。

+0

完璧、ありがとう!ちょっと変わって、私は 'ins.IDENTITYCOL'と' del.IDENTITYCOL'を使用しなければなりませんでした – TryNCode

関連する問題