似乎目前爲止沒有答案。正如我所說,一個可能性是使用擴展事件象下面這樣:
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審計或擴展事件。這個記錄是從應用程序訪問的嗎那將是另一種選擇。 –
我絕對會使用應用程序將查詢記錄到日誌表中。如果你不能使用該應用程序,我想你可以使用第三方事務日誌閱讀器進行研究,但如果是我,我會告訴我的老闆這個邏輯的位置在應用程序中。 ......其實我不必告訴他,因爲他已經知道了。 :) –