は、これまでのところ答えのように思えるが認識されます。私が述べたように、一つの可能性は、以下のような拡張イベントを使用することです:
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の監査または拡張イベントに助言します。このレコードはアプリケーションからアクセスされますか?それは別の選択肢になります。 –
私は絶対にアプリケーションを使用して、ログテーブルにクエリをログします。アプリケーションを使用できない場合は、サードパーティのトランザクションログリーダーを使用して調べることができますが、それが私の場合は、私の上司にこのロジックがアプリケーションにある場所を伝えます。 ...実際には、彼はすでに知っていたので、彼に話す必要はありませんでした。 :) –