【问题标题】:Get data from column when update is performed执行更新时从列中获取数据
【发布时间】:2017-12-21 11:20:24
【问题描述】:

我有三个表OldTableNewTableMainTable。我创建了一个触发器,将旧值放入 OldTable 并将新值放入 Newtable

我只需要获取更改的数据。

主表

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

旧表

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

新表

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

【问题讨论】:

  • mysql 还是 Sqlserver?请不要发送垃圾标签
  • 通过将最早的 old_table 与当前的 main_table 匹配肯定可以找到净变化吗?在这种情况下,new_table 是无关紧要的。

标签: sql-server sql-server-2008 stored-procedures triggers


【解决方案1】:

我不明白您为什么需要在触发器中选择此数据?!

但如果您需要将其插入其他地方,那么您可以这样做:

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

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2015-10-08
    • 1970-01-01
    • 2017-07-19
    • 2012-03-31
    相关资源
    最近更新 更多