Можно ли получить номер строки выполняющегося в настоящее время sproc в SQL Server? - PullRequest
2 голосов
/ 29 декабря 2010

Несколько лет назад я работал в среде Sybase / Delphi, используя BDE для подключения к серверу БД.У нас было небольшое приложение Delphi, которое, учитывая имя выполняемой в данный момент хранимой процедуры, могло сказать вам, какая строка этого sproc выполняется в данный момент.Это было исключительно полезно для отладки sprocs, которые, казалось, зависали.

Я хотел бы использовать эту функцию в SQL Server, но я не могу вспомнить, была ли это функция Sybase или BDE.Доступна ли эта функция в SQL Server и, если да, какие команды мне нужно использовать для просмотра этой информации?

Ответы [ 2 ]

6 голосов
/ 29 декабря 2010

Вы можете использовать что-то вроде

SELECT
    CASE
        WHEN statement_end_offset = -1
        THEN text
        ELSE SUBSTRING(text,statement_start_offset/2,(statement_end_offset- statement_start_offset)/2)
    END,
    statement_end_offset, statement_start_offset
FROM    sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE session_id = 53 --Or whatever!

statement_start_offset и statement_end_offset - это смещения символов, которые отображаются на выполняемый в данный момент оператор, а не на номер строки.

Одна строка может содержать несколько исполняемых операторов, а одна инструкция может занимать несколько строк.

2 голосов
/ 29 декабря 2010

Если вы используете SQL Server 2008, вы можете отлаживать сохраненные процессы так же, как вы можете отлаживать код C #. Вы можете установить точки останова и выполнить оператор за оператором. Вы можете сделать это в SSMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...