如何查找已在数据库上执行的 DELETE 和 UPDATE 语句?

3 sql-server-2008 sql-server audit

我试图找出在某个时间段内在某个数据库上执行了哪些删除和更新语句。

我遇到了以下查询,但它生成了一条错误消息:

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)

错误信息是:

消息 102,级别 15,状态 1,第 3 行“.”附近的语法不正确。

如果我尝试:

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)

我收到另一个错误:

Msg 321, Level 15, State 1, Line 3
"sql_handle" is not a recognized table hints option. If it is intended as a parameter to a table-valued function or to the CHANGETABLE function, ensure that your database compatibility mode is set to 90.
Run Code Online (Sandbox Code Playgroud)

据我了解,在我对该主题的研究中,这不是一件容易的事。

这个查询甚至是正确的方法吗?

有问题的 SQL 版本:

Microsoft SQL Server Standard Edition (64-bit)
Microsoft SQL Server Management Studio                      10.0.2531.0
Microsoft Analysis Services Client Tools                        10.0.1600.22
Microsoft Data Access Components (MDAC)                     6.1.7600.16385
Microsoft MSXML                     3.0 6.0 
Microsoft Internet Explorer                     8.0.7600.16385
Microsoft .NET Framework                        2.0.50727.4984
Operating System                        6.1.7600
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 8

master数据库的上下文中运行它,因为您必须在设置为 SQL Server 2000 兼容级别的用户数据库的上下文中运行它。

以下应该工作正常

USE master;

SELECT deqs.last_execution_time AS [Time],
       dest.TEXT                AS [Query]
FROM   sys.dm_exec_query_stats AS deqs
       CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE  dest.text LIKE '%Delete%from%'
ORDER  BY deqs.last_execution_time DESC 
Run Code Online (Sandbox Code Playgroud)