2017-12-21 3 views
0

私は3つのテーブルOldTable,NewTableおよびMainTableを持っています。私は古い値をOldTableに入れ、新しい値をNewtableに入れるトリガーを作った。更新が実行されたときに列からデータを取得

変更されたデータのみを取得する必要があります。

MainTable

EID Ename EAddress Emobile 
1 mittal pardi  9876543212 
2 vaibhav Porbandar 7456543212 

OLD TABLE

ID EID Ename EAddress Emobile  CurrentDate 
1 2 vaibhav pardi  7456543212 2017-12-21 11:00:23.437 

NEW TABLE

ID EID Ename EAddress Emobile  CurrentDate 
1 2 vaibhav Porbandar 7456543212 2017-12-21 11:00:23.437 

私は必要なもの:

EID OldValue NewValue 
2 pardi  Porbandar  

新しい値と古い値が複数存在することがあります。

マイトリガーコード:

ALTER TRIGGER [dbo].[trg_TEST_Upd] 
ON [dbo].[MAIN_TABLE] 
FOR UPDATE 
AS 
    begin 
    SELECT * FROM INSERTED -- show data in INSERTED logical table 
    SELECT * FROM DELETED -- show data in DELETED logical table 

    insert into New_TABLE(EID,Ename,EAddress,Emobile,CurrentDate)    
       select EID,Ename,EAddress,Emobile,getdate() from INSERTED 


    insert into OLD_TABLE(EID,Ename,EAddress,Emobile,CurrentDate)     
      select EID,Ename,EAddress,Emobile,getdate() from DELETED 

End 
+1

MySQLやSQLSERVERを? plzはタグを迷惑メールしないでください –

+0

確かに、最も古いold_tableを現在のmain_tableと照合することで正味の変化を見つけることができますか?この場合、new_tableは無関係です。 –

答えて

0

あなたはトリガー内でこのデータを選択する必要があるだろう、なぜ私は理解していません!

しかし、あなたはそれがどこかにそれを挿入する必要がある場合、あなたはこれを行うことができます。

SELECT 
    i.EID, 
    MAX(i.Ename) AS newNameValue, 
    MAX(d.Ename) AS oldNameValue, 

    MAX(i.EAddress) AS newEAddressValue, 
    MAX(d.EAddress) AS oldEAddressValue 
FROM INSERTED AS i 
INNER JOIN DELETED AS d ON i.EID = d.EID 
GROUP BY i.EID 
関連する問題