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

时间:2011-05-23 05:07:18

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

我遇到了许多应用程序读/写的遗留数据库不断变化的问题,而我无法解决改变它的问题。

我的应用程序在表格的某一行中更改了某个值,但是在一周左右的时间后,某些内容会不断更改它,我很难理解它可能是什么。

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

1 个答案:

答案 0 :(得分:4)

如果您有权访问旧应用程序的连接字符串,请将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一样进行检查。

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

但是所有这一切都有警告,你可以更新你的连接字符串。