如何知道表中是否有变化?

时间:2018-10-23 02:01:40

标签: java sql-server events triggers

我们有一个PLM系统,用户可以在其中创建/更新对象(即产品,Colorway等...)。该对象最终被存储到sqlserver数据库中。这些表的确有一个针对ModifyTimeStamp的列。用户更新对象时,该字段已更新时间戳。

我们正在将该工具与其他应用程序集成。该其他应用程序需要知道何时有人为我们的PLM系统创建/更新对象。

实现此目标的最佳方法是什么?编写某种可以继续监听的监听器,如果表中有更改,它会通知吗?

另一种方法可能是触发。但是,由于触发器仅在该表的范围内,所以我的代码将如何调用该触发器?

2 个答案:

答案 0 :(得分:0)

我认为有很多方法可以解决这个问题。我将尝试描述一些。

  1. 在侦听应用程序上创建调度程序。我建议实现一个调度程序,该调度程序将在每个给定间隔运行,以根据修改时间来获取最新数据并进行处理。

  2. 在侦听应用程序上创建一个新的API,并通过创建/更新应用程序对其进行调用。

  3. 使用微服务架构,例如在应用程序之间使用消息传递服务来通知一个或另一个创建/更新事件。

希望它对您有帮助,祝您好运!

答案 1 :(得分:0)

SQL Server具有称为“ Change Tracking”的功能。必须首先为数据库激活它。如果已激活,则可以发出特殊查询,以返回有关特定表中数据更改的信息。

根据docs中的示例,查询

DECLARE @last_sync_version bigint;  
SET @last_sync_version = <value obtained from query>;  
SELECT [Emp ID], SSN,  
    SYS_CHANGE_VERSION, SYS_CHANGE_OPERATION,  
    SYS_CHANGE_COLUMNS, SYS_CHANGE_CONTEXT   
FROM CHANGETABLE (CHANGES Employees, @last_sync_version) AS C;

将返回自Employees以来@last_sync_version表中的数据更改。