T-SQL, как получить больше, чем последний запрос, выполненный SPID из кэша (DBCC INPUTBUFFER, sys.sysprocesses) - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть такой сценарий:

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 не вариант.

Спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

Вам нужно захватить запросы, используя Расширенные события или Профилировщик .Будет лучше использовать 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.Дважды щелкните по нему, чтобы увидеть собранные данные.

...