【问题标题】:SQL Server Monitor Data Inserts, Updates and Deletes from Legacy ApplicationSQL Server 监视旧应用程序中的数据插入、更新和删除
【发布时间】:2020-02-07 12:27:05
【问题描述】:

我们目前有一个使用 SQL Server 2014 作为数据库的旧版桌面应用程序。我们想在软件之外添加一些我们没有源代码的附加功能。

在桌面软件中完成某项任务时,我们如何监控数据库中不同表的插入、更新或删除哪些数据?这将允许我们以与桌面应用程序当前相同的方式将数据添加到数据库中。

我们尝试了 SQL Profiler,但似乎无法获取信息。

有没有办法从一个数据库中获取两个时间点之间的差异?

【问题讨论】:

    标签: sql sql-server tsql sql-server-2014


    【解决方案1】:

    您可以使用自动执行以响应创建、更新、删除的触发器。您可以为每个表创建触发器,它会为您提供所需的信息

    CREATE TRIGGER [schema_name.]trigger_name
    ON table_name
    AFTER  {[INSERT],[UPDATE],[DELETE]}
    [NOT FOR REPLICATION]
    AS
    {sql_statements}
    

    【讨论】:

    • 如果他有 2000 张桌子怎么办?如果他为他的所有表创建触发器,那么他正是他最初开始的地方
    • 是的,这是个问题。数据库有大约 500 个表,我们不确定应用程序中的每个函数会访问哪些表。
    • 我们在测试数据库上执行此操作,因此有没有办法向每个表添加触发器,而不必一次执行一个表,并且所有触发器都会将记录添加到一个表中我们可以看到不同的动作吗?
    • 据我所知,触发器(插入、更新和/或删除)属于特定表。如果您需要两个表(或许多表)上的触发器,则需要两个触发器(或许多触发器)
    • 对不起,我不清楚。我的意思是有一种方法可以使用脚本向每个表添加一个触发器,而不是一次添加一个触发器。
    【解决方案2】:
    We have tried SQL Profiler but can't seem to get the information
    

    ^ 这是正确的做法。触发器只会显示查询的最终结果,而不是实际运行的查询 - 可能有计算、中间步骤等。

    当您说“似乎无法获取信息”时,您的确切意思是什么? Profiler 将能够向您显示针对 SQL 实例运行的所有查询的文本

    【讨论】:

    • 这可能是因为我没有使用正确的过滤器来缩小范围,但我在分析器中获得了几千行代码,而在旧版应用程序中只进行了一次插入操作。我们主要关心的是数据库中发生了什么变化,因此使用触发器可以准确地向我们展示插入、更改或删除的内容。我们不一定需要使用的实际查询。
    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多