我有这种情况:
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。
谢谢!
答案 0 :(得分:1)
您需要使用Extended Events或Profiler捕获查询。使用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
启动会话,执行查询,然后停止它。您可以使用对象资源管理器中的Management \ Extended Events \ Sessions \ Capture_Queries
节点在SSMS中查看捕获的查询-会话下有一个package0.event_file节点。双击以查看收集的数据。