2010-12-28 3 views
2

Vor ein paar Jahren arbeitete ich in einer Sybase/Delphi-Umgebung und verwendete die BDE, um eine Verbindung zum DB-Server herzustellen. Wir hatten eine kleine Delphi-App, die Ihnen anhand des Namens einer aktuell ausgeführten gespeicherten Prozedur sagen konnte, welche Zeile dieses Sprocs gerade ausgeführt wurde. Dies war besonders nützlich zum Debuggen von Sprocs, die zu hängen schienen.Kann die Zeilennummer des aktuell ausgeführten Sprocs in SQL Server abgerufen werden?

Ich möchte diese Funktionalität in SQL Server verwenden, aber ich kann mich nicht erinnern, ob es eine Sybase- oder eine BDE-Funktion war. Ist diese Funktionalität in SQL Server verfügbar und wenn ja, welche Befehle muss ich verwenden, um diese Informationen anzuzeigen?

Antwort

6

Sie können so etwas wie

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! 

Die statement_start_offset und statement_end_offset sind Zeichen-Offsets verwenden, die auf die Erklärung Karte zur Zeit eher als eine Zeilennummer ausgeführt wird.

Eine einzelne Zeile kann mehrere ausführbare Anweisungen enthalten und eine einzelne Anweisung kann sich über mehrere Zeilen erstrecken.

2

Wenn Sie SQL Server 2008 verwenden, können Sie gespeicherte Prozeduren genau so debuggen, wie Sie C# -Codes debuggen können. Sie können Haltepunkte setzen und Anweisung für Anweisung ausführen. Sie können dies aus SSMS heraus tun.

Verwandte Themen