Wie werden die Werte einer Tabellenvariablen zur Debug-Zeit in T-SQL angezeigt?

187

Können wir die Werte (Zeilen und Zellen) in einer Variablen mit Tabellenwert in SQL Server Management Studio (SSMS) während der Debug-Zeit sehen? Wenn ja, wie?

Geben Sie hier die Bildbeschreibung ein

Faiz
quelle

Antworten:

31

Dies ist gemäß diesem Microsoft Connect-Link noch nicht implementiert: Microsoft Connect

Rortega
quelle
2
Und hier sind wir im Jahr 2016. Nicht besser. Der Connect-Link funktioniert auch nicht mehr.
dotNET
5
Um ehrlich zu sein, ist dies keine Antwort, da die Frage nicht beantwortet wird. Die Frage ist, wie dies zu tun ist (nicht, ob SSMS über eine Funktion verfügt). Dies wird nicht implementiert, während es Möglichkeiten gibt, die Werte anzuzeigen sehr hilfreich.
Răzvan Flavius ​​Panda
1
Bitte löschen Sie diese Antwort. Die Antwort unten sollte die akzeptierte Antwort sein.
Vortex852456
2018, immer noch nein.
AgentFire
317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

Fügen Sie die obige Anweisung an der Stelle ein, an der Sie den Inhalt der Tabelle anzeigen möchten. Der Inhalt der Tabelle wird im lokalen Fenster als XML gerendert, oder Sie können ihn @vdem Überwachungsfenster hinzufügen .

Geben Sie hier die Bildbeschreibung ein

kirby
quelle
1
Dies ist definitiv eine Problemumgehung, die gut genug ist, um kleine Tabellen als XML darzustellen.
Faiz
4
Aber hör trotzdem nicht auf zu lesen! Eine weitere großartige Option unten! Toller Thread !!
Mike M
1
Ich hatte große Tabellen mit dem XML nicht sehr freundlich zu lesen. Ich mache einen weiteren Schritt - kopiere das XML und füge es in xmlgrid.net ein und du kannst das XML als Tabelle sehen. Die Tabellenvisualisierung hilft wirklich. Warten auf eine Version von SSMS mit einem Tabellen-Viewer wie dem datierbaren Viewer in Visual Studio.
Moiz Tankiwala
1
Sie können der Klausel "FOR XML" ", ROOT ('rootNodeName')" hinzufügen. Dadurch werden mehrere Zeilen (falls vorhanden) unter einem einzigen Stamm gesammelt, wodurch ein legales XML-Dokument entsteht, das mit dem XML-Visualizer anstelle des Text-Visualizers angezeigt werden kann.
JohnL4
2
Mit SQL Server 2016 oder nie können Sie auch die JSON-Version davon verwenden DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke
18

Dieses Projekt https://github.com/FilipDeVos/sp_select verfügt über eine gespeicherte Prozedur sp_select, mit der Sie aus einer temporären Tabelle auswählen können.

Verwendung:

exec sp_select 'tempDb..#myTempTable'

Während des Debuggens einer gespeicherten Prozedur können Sie eine neue Registerkarte öffnen und diesen Befehl ausführen, um den Inhalt der temporären Tabelle anzuzeigen.

James Hulse
quelle
6
Harag
Hängt auch, wenn eine Transaktion offen ist. Daher ist es nicht sinnvoll, einen Test in einem Framework wie tSQLt zu debuggen, das immer eine Transaktion zu Beginn des Tests öffnet.
Nathan
1
WOW WOW WOW WOW
vothaison
Gut - wäre toll, wenn Sie nach einer oder zwei
Spalten
6

Erstellen Sie in der gespeicherten Prozedur eine globale temporäre Tabelle ## versucht und schreiben Sie eine Einfügeabfrage in Ihre gespeicherte Prozedur, die die Daten in Ihrer Tabelle in diese temporäre Tabelle einfügt.

Sobald dies erledigt ist, können Sie den Inhalt der temporären Tabelle überprüfen, indem Sie ein neues Abfragefenster öffnen. Verwenden Sie einfach "Wählen Sie * aus ## Versuchbar"

messi19
quelle
1

Verwenden Sie einfach die Auswahlabfrage, um die Tabellenvariable anzuzeigen, wo immer Sie sie überprüfen möchten.

http://www.simple-talk.com/sql/learn-sql-server/management-studio-improvements-in-sql-server-2008/

Solairaja
quelle
Ja, die beste und schnellste Option vereinbart. Tun Sie dies einfach und markieren Sie nur das SQL, das Sie ausführen möchten, und führen Sie es aus, wenn Sie mehr Kontrolle benötigen.
Jammin
2
Verwenden Sie die Auswahlabfrage wo im Überwachungsfenster?
Faiz
Verwenden Sie die Auswahl innerhalb der Prozedur oder eine beliebige Ad-hoc-Abfrage, die Sie ausführen
solairaja
Was ich jedoch testen muss, ist eine Tabellenwertfunktion, die den Fehler "Select-Anweisungen, die in einer Funktion enthalten sind, kann keine Daten an einen Client zurückgeben" auslöst. Gibt es eine andere Möglichkeit, speziell über die bereitgestellten Debugging-Tools zu prüfen?
Faiz
3
Nein, das löst die Frage nicht. Ich denke, dass dies ohne zusätzliche Plugins nicht möglich ist.
Faiz
1

Wenn Sie SQL Server 2016 oder höher verwenden, können Sie es auch als JSON-Ergebnis auswählen und in JSON Visualizer anzeigen. Es ist viel einfacher zu lesen als in XML und ermöglicht das Filtern von Ergebnissen.

DECLARE @v nvarchar(max) = (SELECT * FROM Suppliers FOR JSON AUTO)

Geben Sie hier die Bildbeschreibung ein

Sousuke
quelle
0

Ich bin zu dem Schluss gekommen, dass dies ohne Plugins nicht möglich ist.

Faiz
quelle
Ich habe einige Vorschauen von Visual Studio 2010 gesehen. Sehr ausgefallen, komplex und detailliert ... und der Demonstrator wusste nicht, ob temporäre Tabellen im Debug-Modus angezeigt werden können. Vielleicht, wenn es veröffentlicht wird, aber ich halte nicht den Atem an.
Philip Kelley
0

SQL Server Profiler 2014 listet den Inhalt des Tabellenwertparameters auf. Könnte auch in früheren Versionen funktionieren. SP aktivieren: Starten oder RPC: Ereignis in der Gruppe "Gespeicherte Prozeduren" und in der Spalte "TextData" abgeschlossen. Wenn Sie auf den Eintrag im Protokoll klicken, werden die Anweisungen "insert" für die Tabellenvariable angezeigt. Anschließend können Sie den Text kopieren und in Management Studio ausführen.

Beispielausgabe:

declare @p1 dbo.TableType
insert into @p1 values(N'A',N'B')
insert into @p1 values(N'C',N'D')

exec uspWhatever @PARAM=@p1
user3285954
quelle
-1

Warum nicht einfach die Tabelle auswählen und die Variable so anzeigen?

SELECT * FROM @d
Kyle Hoener
quelle
4
Bitte erläutern Sie, wie das geht. Wenn Sie SELECT * FROM @Tabledem zu debuggenden Skript ein hinzufügen, werden keine Ergebnisse an das Ergebnisfenster ausgegeben.
StingyJack
-3

Tut mir leid, ich bin etwas spät zur Party, aber für alle, die zu einem späteren Zeitpunkt über diese Frage stolpern, habe ich den einfachsten Weg gefunden, dies in einer gespeicherten Prozedur zu tun:

  1. Erstellen Sie eine neue Abfrage mit allen oben deklarierten und initialisierten Prozedurparametern.
  2. Fügen Sie den Körper Ihres Verfahrens ein.
  3. Fügen Sie sofort nach der Initialisierung Ihrer Tabellenvariablen mit Daten eine gute, altmodische Auswahlabfrage hinzu.
  4. Wenn 3. nicht die letzte Anweisung in der Prozedur ist, setzen Sie einen Haltepunkt in derselben Zeile, starten Sie das Debuggen und fahren Sie direkt mit Ihrem Haltepunkt fort.
  5. Profitieren!!

Die Antwort von messi19 sollte meiner Meinung nach die akzeptierte sein, da sie einfacher als meine ist und die meiste Zeit die Arbeit erledigt. Wenn Sie jedoch wie ich sind und eine Tabellenvariable in einer Schleife haben, die Sie überprüfen möchten, erledigt dies die Arbeit gut ohne zu viel Aufwand oder externe SSMS-Plugins.

Kenny83
quelle
Dies ist völlig entgegengesetzt zu dem, was das OP versucht.
Jamie Marshall