几年前,我在Sybase / Delphi环境中工作,使用BDE连接到数据库服务器。我们有一个小的Delphi应用程序,给定当前正在执行的存储过程的名称,可以告诉您当前正在执行的该sproc的哪一行。这对于调试似乎悬挂的sprocs非常有用。
我想在SQL Server中使用此功能,但我不记得它是Sybase还是BDE功能。 SQL Server中是否提供此功能,如果可以,我需要使用哪些命令来查看此信息?
答案 0 :(得分: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!
statement_start_offset
和statement_end_offset
是映射到当前正在执行的语句而不是行号的字符偏移量。
单行可以包含多个可执行语句,单个语句可以跨多行。
答案 1 :(得分:2)
如果您使用的是SQL Server 2008,则可以调试存储过程,就像调试C#代码一样。您可以设置断点并按语句执行语句。您可以在SSMS内执行此操作。