2013-07-12 4 views
12

Ich möchte ein komplexes T-SQL-Skript mit SSMS 2012 debuggen.Wie können Daten in Tabellenvariablen während der Debugsitzung in MS SQL Management Studio 2012 angezeigt werden?

Ich kann das Skript im Debug-Modus ausführen und Haltepunkte sowie Schritt durch mein Skript, aber ich kann die gespeicherten Werte nicht sehen in meinen Tabellenvariablen.

Im Locals Fenster ich all diese Variablen zu sehen, aber ihr Wert dargestellt wird als (table):

Locals window

Es gibt keine Möglichkeit, den Inhalt der Variablen über das Kontextmenü anzuzeigen, oder durch einen Klick auf Die Variable.

Ich habe versucht, die Immediate Window zu verwenden, um eine Abfrage für die Tabellenvariable auszuführen, aber das scheint auch nicht zu funktionieren.

Immediate Window

Jede Idee, wie ich die Werte aus meiner Tabelle Variablen im Debug-Sitzung bekommen?

+0

Mögliche Duplikat von [Wie die Werte einer Tabelle Variable in Debug-Zeit in T-SQL sehen?] (Http://stackoverflow.com/questions/1900857/how-to-see -die-Werte-einer-Tabelle-Variable-bei-Debug-Zeit-in-t-sql) – Faiz

Antwort

12

Während ich keine Dokumentation finden kann, die explizit besagt, dass Sie Tabellenvariablen nicht überprüfen können, glaube ich nicht, dass es möglich ist. Von Transact-SQL Debugger

Einheimische und Uhr. Diese Fenster zeigen aktuell zugeordnete Transact-SQL-Ausdrücke an. Ausdrücke sind Transact-SQL-Klauseln, die zu einem einzelnen skalaren Ausdruck ausgewertet werden. Der Transact-SQL-Debugger unterstützt das Anzeigen von Ausdrücken, die auf Transact-SQL-Variablen, -Parameter oder die integrierten Funktionen verweisen, deren Namen mit @@ beginnen. Diese Fenster zeigen auch die Datenwerte an, die den Ausdrücken derzeit zugewiesen sind.

(Mein Schwerpunkt)

Das heißt, können Sie nur Skalare inspizieren.

Was Ihr Versuch, das Direkt-Fenster zu verwenden, die Limitations on Debugger Command and Features sagt:

Das Immediate Fenster angezeigt wird, aber man kann nicht etwas Sinnvolles damit machen, wie eine Variable auf einen Wert, oder Abfragen der Datenbank.


Ich habe noch nie verwendet wirklich den Debugger viel - jedes Mal wenn ich in sie geschaut haben, ich Einschränkungen wie diese Begegnung.

Deshalb habe ich immer noch dazu neigen, „Old School“/„printf“ Ansätze zur Debug-SQL zu verwenden - sind unter anderem zusätzliche SELECT * s über den gesamten Code zügig den aktuellen Stand der Tabellen und zusätzliche PRINT oder RAISERROR Nachrichten zeigt, die anderen Staaten zeigen usw. Und dann führe den Code normal aus, bis du ihn in Form gebracht hast.

+0

Vielen Dank für Ihre Forschung, meins brachte keine Ergebnisse zu. Ich wollte einfach nicht glauben, dass das nicht möglich ist, denn das macht den Debugger in meinen Augen völlig unbrauchbar. Das Problem mit dem "Old-Skool" -Debugging ist, dass wir den Code so gekämmt haben, dass er keine Debug-/Kommented/Unreachable-Anweisungen enthält (wie von unserer Codierungsrichtlinie gefordert) und ich muss sie wieder zurückbringen ... –

9

Mit dem nächsten Code können Sie den Inhalt Ihrer Tabelle als XML sehen.

DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO) 

Es ist nützlich zu überprüfen, was Ihre SELECT-Anweisungen zurückgeben. Ich habe es getestet und es funktioniert.

Lesen Sie mehr here.

+1

Das funktioniert nicht. Ich kann das @ v im lokalen Fenster nicht sehen. – Naren

+1

@Naren Ich habe das verifiziert. Es funktioniert im lokalen Fenster und ich kann die Werte sehen, die in der Variable @v aufgefüllt sind. Ich verwende SQL Server Management Studio für SQL Server 2008 R2. – RBT

+0

Sie können ", ROOT ('rootNodeName')" zur "FOR XML" -Klausel hinzufügen. Dadurch werden mehrere Zeilen (falls vorhanden) unter einem einzigen Stamm gesammelt, was ein rechtmäßiges XML-Dokument darstellt, das mit dem XML-Visualizer anstelle des Textvisualisierers angezeigt werden kann. – JohnL4

1

ich nur einfach gesagt in select-Anweisungen in meinem Skript und zeigt es an das Fenster Ergebnisse ..

select * from @VarTable;

Jetzt gehe ich durch meinen Code und drücke die Auswahltaste, um die Werte anzuzeigen. Dann kommentiere ich sie entweder aus, wenn sie fertig sind, oder setze ein Testing-Flag.

hoffe, das hilft

Verwandte Themen