要观看已经过更改的SQL列

时间:2018-04-18 07:40:21

标签: tsql sql-server-2014 auditing change-data-capture

我需要在表中查看sql列,最近使用上次修改日期更改了

你能帮我查询一下最新的修改吗?

原始表:

 S.No Employee id       First Name   Last Name   Address 1
  1    00007              J           Siva        East st
  2    020007             G           Moorthy     West street
  3    300007             gan         thanu       East st
  4    100007             esh         Moor        West street

修改后的表格

S.No Employee id       First Name   Last Name   Address 1
 1    00007               Jun        Siva      East st
 2    020007              Gon        Moorthy   West street
 3    300007              gan        thanu     East st
 4    100007              esh        Moor      West street

我只需要获取2行以下:

S.No Employee id       First Name   Last Name   Address 1
1    00007              Jun          Siva      East st
2    020007             Gon          Moorthy   West street

3 个答案:

答案 0 :(得分:0)

解决方案1:

您必须ADD表格中的列{strong> Modified_Date ,并在每次更新时使用 GETDATE() 更新列

每次更新列时,都很容易找到最近更新的列。

S.No Employee id       First Name   Last Name  Address 1    Modified_Date
 1    00007               Jun        Siva      East st      2018-04-18
 2    020007              Gon        Moorthy   West street  2018-04-18
 3    300007              gan        thanu     East st      NULL
 4    100007              esh        Moor      West street  NULL

您可以使用以下方式获取最近更新的值:

SELECT * 
FROM Your_Table 
WHERE Modified_Date IS NOT NULL
ORDER BY Modified_Date DESC

解决方案2:

否则,您必须创建 TRIGGERS 来跟踪更新。

答案 1 :(得分:0)

单独的SQL无法“监视”数据的变化。它只是一种查询语言,您决定何时(以及是否)调用。

但是,DBMS特定的机制可以帮助您监视数据更改,而无需轮询(定期重新查询)。例如,SQL Server具有SqlDependency

或者您可以实现向客户端应用程序发送通知的触发器,这些触发器可能有自己的一组权衡。

答案 2 :(得分:0)

您似乎无法出于任何原因修改源数据库的架构,因为之前与修改日期和触发器相关的答案应该足够了。或者,您可以将数据轮询到单独的审计表中,并使用WHERE子句和校验和定期执行比较。但是,您可能会错过更改,因为轮询机制不会由数据更改触发,并且值在轮询间隔中可能会多次更改。