sql - 确定哪个应用程序正在更改 sql 数据库值

标签 sql sql-server tsql sql-server-2008 triggers

我遇到了一个问题,许多应用程序读取/写入的遗留数据库不断发生变化,我无法弄清楚是什么在改变它。

我的应用程序更改了表中特定行中的特定值,但在一周左右后某些东西不断将其更改回来,我很难弄清楚它可能是什么。

有什么方法可以将事件/触发器附加到这个值,然后让它存储/通过电子邮件发送更改它的详细信息?或者至少是什么时候改变的?

最佳答案

如果您有权访问遗留应用程序的连接字符串,请将 Application Name 关键字添加到连接字符串。 Some info here.

在服务器端为要跟踪的表创建触发器。在触发日志app_name() 到一个日志表中。像这样:

create trigger Tracker
on TableName
after insert, update, delete 
as
    insert LogTable(TableName, ApplicationName)
    values('TableName', app_name())
go

此外,如果每个应用程序都有一个专用用户,您可以检查并记录 system_user 值。

如果您的应用程序由不同的服务器托管,您也可以添加客户端 IP。您可以这样检查它 select client_net_address from sys.dm_exec_connections where session_id = @@SPID

此外,您可以使用分析器查看所有这些参数。

但是所有这一切都需要注意您可以更新您的连接字符串。

关于sql - 确定哪个应用程序正在更改 sql 数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6093055/

相关文章:

sql - case within 加入 "ON"子句

sql - 如何为 PIVOT 聚合指定 GROUP BY

mysql - 选择一列的最小值另一列的最大值

sql - 在基于多列的 SQL 查询中返回排名

c# - 如何使用 SqlCommand 参数指定选择查询的架构名称

c# - 从 C# SQLCLR 存储过程批量插入 SQL 表的最快方法

c# - SQL Server Decimal - 为什么我的十进制值只捕获小数点后两位小数?是的,它是小数(18,5)

sql - MS SQL json 查询/where 子句嵌套数组项

sql-server - alter table add bit column as case when 情况

java - ^1 在 SQL 调用中是什么意思?