Sql server 是否可以获取SQL Server中当前正在执行的存储过程的行号?

Sql server 是否可以获取SQL Server中当前正在执行的存储过程的行号?,sql-server,debugging,stored-procedures,Sql Server,Debugging,Stored Procedures,几年前,我在Sybase/Delphi环境中工作,使用BDE连接到DB服务器。我们有一个小的Delphi应用程序,给定当前正在执行的存储过程的名称,它可以告诉您当前正在执行存储过程的哪一行。这对于调试似乎挂起的存储过程非常有用 我希望在SQL Server中使用此功能,但我不记得它是Sybase还是BDE功能。SQL Server中是否有此功能?如果有,我需要使用什么命令来查看此信息?如果您使用的是SQL Server 2008,则可以调试存储的过程,就像调试C代码一样。您可以设置断点并逐个语句

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


我希望在SQL Server中使用此功能,但我不记得它是Sybase还是BDE功能。SQL Server中是否有此功能?如果有,我需要使用什么命令来查看此信息?

如果您使用的是SQL Server 2008,则可以调试存储的过程,就像调试C代码一样。您可以设置断点并逐个语句执行语句。您可以在SSMS中执行此操作。

您可以使用以下内容

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\u start\u offset
statement\u end\u offset
是映射到当前正在执行的语句的字符偏移量,而不是行号

一行可以包含多个可执行语句,一条语句可以跨越多行