0

我有这种情况:

SPID = 100 (A SSMS tab for example)


SELECT TOP 1 * FROM SOME_TABLE
GO
SELECT TOP 1 * FROM SOME_TABLE2
GO
SELECT TOP 1 * FROM SOME_TABLE3

当我运行 (DBCC INPUTBUFFER, sys.sysprocesses) 时,我只执行了最后一个查询:

  SELECT TOP 1 * FROM SOME_TABLE3.

我需要从该会话中获取所有查询(在本例中为 spid 100),而不仅仅是最后一个。有没有办法做到这一点?

我正在寻找一种使用 TSQL 执行此操作的方法,获取跟踪 sql-server Profiler 不是一个选项。

谢谢!

4

1 回答 1

1

您需要使用Extended EventsProfiler来捕获查询。使用XE会更好。创建一个像这样的会话:

CREATE EVENT SESSION [Capture_Queries]
ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
  ACTION 
  (
          sqlserver.sql_text
  )
  WHERE 
  (
          session_id = 100
  )
)
ADD TARGET package0.event_file
(
    SET filename = 'D:\CaptureQueries.xel',
        max_file_size = 5,
        max_rollover_files = 1
)

之后,您可以使用以下命令启动和停止它:

ALTER EVENT SESSION [Capture_Queries] ON SERVER STATE = START
ALTER EVENT SESSION [Capture_Queries] ON SERVER STATE = STOP

启动会话,执行查询然后停止它。您可以使用对象资源管理器中的节点查看 SSMS 中捕获的查询Management \ Extended Events \ Sessions \ Capture_Queries- 会话下有一个 package0.event_file 节点。双击它以查看收集的数据。

于 2018-12-13T14:38:43.603 回答