2013-07-12 12 views
12

Chciałbym debugować złożony skrypt T-SQL za pomocą SSMS 2012.Jak wyświetlić dane w zmiennych tabeli podczas sesji debugowania w MS SQL Management Studio 2012?

Mogę uruchomić skrypt w trybie debugowania i umieścić punkty przerwania, a także przejść przez mój skrypt, ale nie widzę zapisanych wartości w moich zmiennych tabelarycznych.

W oknie Locals widzę te wszystkie zmienne, ale ich wartość jest pokazywana jako (table):

Locals window

Nie ma sposobu, aby przeglądać zawartość zmiennej za pomocą menu kontekstowego lub klikając zmienna.

Próbowałem użyć Immediate Window, aby uruchomić zapytanie dotyczące zmiennej tabeli, ale to też nie działa.

Immediate Window

Każdy pomysł w jaki sposób można uzyskać wartości z mojego zmiennych stołowych w sesji debugowania?

+0

Możliwa duplikat [Jak widać wartości zmiennej tabeli w czasie debugowania w T-SQL?] (Http://stackoverflow.com/questions/1900857/how-to-see -the-value-of-table-variable-at-debug-time-in-t-sql) – Faiz

Odpowiedz

12

Chociaż nie mogę znaleźć żadnej dokumentacji, w dowolnym miejscu, która wyraźnie stwierdza, że ​​nie można kontrolować zmiennych tabeli, nie sądzę, że jest to możliwe. Od Transact-SQL Debugger

Miejscowi i Watch. W tych oknach wyświetlane są obecnie wyrażenia języka Transact-SQL. Wyrażenia są klauzulami Transact-SQL, które oceniają pojedyncze, skalarne wyrażenie. Debugger języka Transact-SQL obsługuje wyrażenia odnoszące się do zmiennych, parametrów lub wbudowanych funkcji języka Transact-SQL, których nazwy zaczynają się od @@. Te okna wyświetlają również wartości danych, które są obecnie przypisane do wyrażeń.

(Moja nacisk)

Oznacza to, że można sprawdzać tylko skalary.

Co do swojej próbie użycia bezpośrednim okna, Limitations on Debugger Command and Features mówi:

Zostanie wyświetlony Natychmiastowe okno, ale nie można niczego użyteczne z nim, takich jak ustawienie zmiennej na wartość zrobić, lub zapytanie do bazy danych.


nigdy nie użył debuggera naprawdę dużo - za każdym razem mam spojrzał na nią, ja napotykają ograniczenia jak ten.

Dlatego nadal mają tendencję do używania „old-skool”/„printf” zbliża się do debugowania SQL - to dodatkowy SELECT * s obficie przez cały kod pokazujący aktualny stan tabel i dodatkowe PRINT lub RAISERROR wiadomości, które pokazują inne stany itp. A następnie po prostu uruchom kod normalnie, dopóki nie połączysz go w kształt.

+0

Dziękuję za twoje badania, moje nie przyniosły żadnych rezultatów. Po prostu nie chciałem uwierzyć, że nie jest to możliwe, ponieważ czyni debuggera całkowicie bezużytecznym w moich oczach. Problem z "old-skool" -debugging polega na tym, że właśnie "przeczesaliśmy" kod, aby nie zawierał instrukcji debug/commented out/unreachable (zgodnie z wymogami naszych zasad kodowania) i muszę je sprowadzić ponownie ... –

9

Za pomocą następnego kodu można zobaczyć zawartość tabeli jako XML.

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

Przydatne jest sprawdzenie zwracanych instrukcji SELECT. Testowałem to i to działa.

Czytaj więcej here.

+1

To nie działa. Nie widzę okna @v w locale. – Naren

+1

@Naren Sprawdziłem to. Działa w lokalnym oknie i widzę wartości zapełnione w zmiennej @v. Korzystam z SQL Server Management Studio dla SQL Server 2008 R2. – RBT

+0

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

1

ja po prostu umieścić w wybranych sprawozdań do mojego skryptu i wyświetla go w oknie wyników ..

select * from @VarTable;

teraz, gdy przechodzę przez mój kod i uderzam w przycisk wyboru, który wyświetli wartości. Następnie albo je skomentuję, kiedy zakończę testowanie, albo ustawię flagę Testowania.

Nadzieja to pomaga

Powiązane problemy