可以获取SQL Server中当前正在执行的sproc的行号吗?

Ian*_*emp 2 sql-server debugging stored-procedures

几年前,我在Sybase/Delphi环境中工作,使用BDE连接到数据库服务器.我们有一个小的Delphi应用程序,给定当前正在执行的存储过程的名称,可以告诉您当前正在执行的该sproc的哪一行.这对于调试似乎悬挂的sprocs非常有用.

我想在SQL Server中使用此功能,但我不记得它是Sybase还是BDE功能.SQL Server中是否提供此功能,如果可以,我需要使用哪些命令来查看此信息?

Mar*_*ith 6

你可以使用类似的东西

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!
Run Code Online (Sandbox Code Playgroud)

statement_start_offsetstatement_end_offset是字符偏移映射到当前正在执行的,而不是行号的声明.

单行可以包含多个可执行语句,单个语句可以跨多行.