似乎目前为止没有答案。正如我所说,一个可能性是使用扩展事件象下面这样:
CREATE EVENT SESSION [TestTableSelectLog]
ON SERVER
ADD EVENT sqlserver.sp_statement_completed (
WHERE [statement] LIKE '%SELECT%TestTable%' --Capure all selects from TestTable
AND [statement] NOT LIKE '%XEStore%' --filter extended event queries
AND [statement] NOT LIKE '%fn_xe_file_target_read_file%'),
ADD EVENT sqlserver.sql_statement_completed (
WHERE [statement] LIKE '%SELECT%TestTable%'
AND [statement] NOT LIKE '%XEStore%'
AND [statement] NOT LIKE '%fn_xe_file_target_read_file%')
ADD TARGET package0.event_file (SET FILENAME=N'C:\Temp\TestTableSelectLog.xel');--log to file
ALTER EVENT SESSION [TestTableSelectLog] ON SERVER STATE=START;--start capture
您可以从文件中使用sys.fn_xe_file_target_read_file
然后选择:
CREATE TABLE TestTable
(
Ticker varchar(10),
[Description] nvarchar(100)
)
SELECT * FROM TestTable
SELECT *, CAST(event_data AS XML) AS 'event_data_XML'
FROM sys.fn_xe_file_target_read_file('C:\Temp\TestTableSelectLog*.xel', NULL, NULL, NULL)
的SELECT
声明应被捕获。
扩展事件也可以从GUI(Management Studio中的Management/Extended Events/Sessions)进行配置。
您可以创建一个触发器,以便在访问记录时将其记录到另一个表中。然后,您可以将此报表从其他表中移除。但是,请记住,会有一些性能开销,因为每次查询数据时触发器都必须执行。 –
触发器用于选择?我会建议SQL Server审计或扩展事件。这个记录是从应用程序访问的吗那将是另一种选择。 –
我绝对会使用应用程序将查询记录到日志表中。如果你不能使用该应用程序,我想你可以使用第三方事务日志阅读器进行研究,但如果是我,我会告诉我的老板这个逻辑的位置在应用程序中。 ......其实我不必告诉他,因为他已经知道了。 :) –