Jak zobaczyć wartości zmiennej tabeli w czasie debugowania w T-SQL?

187

Czy możemy zobaczyć wartości (wiersze i komórki) w zmiennej tabeli o wartości w SQL Server Management Studio (SSMS) podczas debugowania? Jeśli tak to jak?

wprowadź opis zdjęcia tutaj

Faiz
źródło

Odpowiedzi:

31

To jeszcze nie zostało zaimplementowane zgodnie z tym linkiem Microsoft Connect : Microsoft Connect

rortega
źródło
2
I oto jesteśmy w 2016 roku. Nie lepiej. Łącze Connect również już nie działa.
dotNET
5
Szczerze mówiąc, nie jest to tak naprawdę odpowiedź, ponieważ nie odpowiada na pytanie, pytanie brzmi, jak to zrobić (nie czy SSMS ma jakąkolwiek funkcję), stwierdzając, że nie jest to zaimplementowane, podczas gdy istnieją sposoby wyświetlania wartości. bardzo pomocne.
Răzvan Flavius ​​Panda
1
Usuń tę odpowiedź. Poniższa odpowiedź powinna być odpowiedzią zaakceptowaną.
Vortex852456
2018, wciąż nie.
AgentFire,
317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

Wstaw powyższą instrukcję w punkcie, w którym chcesz wyświetlić zawartość tabeli. Zawartość tabeli zostanie wyrenderowana jako XML w oknie lokalnych lub możesz dodać @vdo okna zegarków.

wprowadź opis zdjęcia tutaj

Kirby
źródło
1
Jest to zdecydowanie obejście, które jest wystarczająco dobre, aby małe tabele mogły być prezentowane jako XML.
Faiz
4
Ale nadal nie przestawaj czytać! Kolejna niesamowita opcja poniżej! Świetny wątek !!
Mike M,
1
Miałem duże tabele z niezbyt przyjaznym do odczytania kodem XML. Robię kolejny krok - skopiuj XML i wklej w xmlgrid.net, a zobaczysz XML jako tabelę. Wizualizacja tabeli naprawdę pomaga. Oczekiwanie na wydanie SSMS, które ma przeglądarkę tabel, taką jak przeglądarka danych w Visual Studio.
Moiz Tankiwala
1
Możesz dodać „, ROOT („ rootNodeName ”)” do klauzuli „FOR XML”. Spowoduje to zebranie wielu wierszy (jeśli istnieją) w jednym katalogu głównym, co stanowi legalny dokument XML, który można wyświetlić za pomocą wizualizatora XML zamiast wizualizatora tekstowego.
JohnL4,
2
Korzystając z programu SQL Server 2016 lub nigdy nie można również użyć wersji JSON tego DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke
18

Ten projekt https://github.com/FilipDeVos/sp_select ma procedurę składowaną, sp_selectktóra pozwala wybierać z tabeli tymczasowej.

Stosowanie:

exec sp_select 'tempDb..#myTempTable'

Podczas debugowania procedury składowanej można otworzyć nową kartę i uruchomić to polecenie, aby wyświetlić zawartość tabeli temp.

James Hulse
źródło
6
Idealne do tabel tymczasowych, ale nie do zmiennych tabel
Harag
Zawiesza się również, jeśli istnieje otwarta transakcja, więc nie ma większego sensu, jeśli używasz debugowania testu w środowisku takim jak tSQLt, który zawsze otwiera transakcję na początku testu.
Nathan
1
WOW WOW WOW WOW
vothaison
Dobrze - byłoby świetnie, gdybyś mógł posortować według jednej lub dwóch kolumn
user2486488
6

W procedurze składowanej utwórz globalną tabelę tymczasową ## kuszącą i napisz zapytanie wstawiania w ramach procedury składowanej, która wstawi dane z tabeli do tej tabeli tymczasowej.

Po wykonaniu tej czynności możesz sprawdzić zawartość tabeli tymczasowej, otwierając nowe okno zapytania. Wystarczy użyć „wybierz * z ## temptable”

messi19
źródło
1

Wystarczy użyć zapytania select, aby wyświetlić tabelę zmiennych, gdziekolwiek chcesz sprawdzić.

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

solairaja
źródło
Tak, uzgodniono najlepszą i najszybszą opcję. Po prostu zrób to i zaznacz i uruchom tylko SQL, który chcesz uruchomić, jeśli potrzebujesz większej kontroli.
Jammin,
2
Skorzystaj z zapytania, gdzie w oknie zegarka?
Faiz
użyj select wewnątrz procedury lub dowolnego zapytania adhoc, które wykonujesz
solairaja
Ale to, co muszę przetestować, to funkcja ceniona w tabeli i generuje błąd „Instrukcje instrukcji zawarte w funkcji nie mogą zwrócić danych klientowi”. Czy jest jakiś inny sposób, aby zbadać za pomocą dostarczonych narzędzi do debugowania?
Faiz,
3
Nie, to nie rozwiązuje pytania. Myślę, że nie jest to możliwe bez żadnych dodatkowych wtyczek.
Faiz
1

Jeśli korzystasz z programu SQL Server 2016 lub nowszego, możesz go również wybrać jako wynik JSON i wyświetlić w JSON Visualizer, znacznie łatwiej jest go odczytać niż w XML i umożliwia filtrowanie wyników.

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

wprowadź opis zdjęcia tutaj

Sousuke
źródło
0

Doszedłem do wniosku, że nie jest to możliwe bez żadnych wtyczek.

Faiz
źródło
Widziałem kilka podglądów programu Visual Studio 2010. Bardzo fantazyjne, złożone i szczegółowe ... a demonstrator nie wiedział, czy tabele tymczasowe można wyświetlić w trybie debugowania. Może kiedy zostanie wypuszczony, ale nie wstrzymuję oddechu.
Philip Kelley,
0

SQL Server Profiler 2014 wyświetla zawartość parametru wartości tabeli. Może działać również w poprzednich wersjach. Włącz SP: Rozpoczęcie lub RPC: Zdarzenie zakończone w grupie Procedury składowane i kolumnie TextData, a po kliknięciu wpisu w dzienniku pojawią się instrukcje wstawiania zmiennej tabeli. Następnie możesz skopiować tekst i uruchomić w Management Studio.

Przykładowe dane wyjściowe:

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

exec uspWhatever @PARAM=@p1
użytkownik3285954
źródło
-1

Dlaczego nie wybrać tabeli i wyświetlić zmienną w ten sposób?

SELECT * FROM @d
Kyle Hoener
źródło
4
Proszę wyjaśnić, jak to zrobić. Dodanie SELECT * FROM @Tabledo debugowanego skryptu nie powoduje wyświetlenia wyników w oknie wyników.
StingyJack,
-3

Przepraszam chłopaki, jestem trochę spóźniony na imprezę, ale dla każdego, kto natknie się na to pytanie w późniejszym terminie, znalazłem najłatwiejszy sposób na zrobienie tego w procedurze przechowywanej:

  1. Utwórz nowe zapytanie z dowolnymi parametrami procedury zadeklarowanymi i zainicjowanymi u góry.
  2. Wklej w treści swojej procedury.
  3. Dodaj staromodną kwerendę select natychmiast po zainicjowaniu zmiennej tabeli danymi.
  4. Jeśli 3. nie jest ostatnią instrukcją w procedurze, ustaw punkt przerwania w tej samej linii, rozpocznij debugowanie i przejdź prosto do punktu przerwania.
  5. Zysk!!

odpowiedź messi19 powinna być zaakceptowana przez IMHO, ponieważ jest ona prostsza niż moja i wykonuje pracę przez większość czasu, ale jeśli jesteś podobny do mnie i masz zmienną tabelową w pętli, którą chcesz sprawdzić, to robi to dobrze bez większego wysiłku lub zewnętrznych wtyczek SSMS.

Kenny83
źródło
Jest to całkowicie przeciwne do tego, co OP próbuje zrobić.
Jamie Marshall,