2013-07-12 7 views
12

Vorrei eseguire il debug di uno script T-SQL complesso utilizzando SQL Server Management Studio 2012.Come visualizzare i dati nelle variabili di tabella durante la sessione di debug in MS SQL Management Studio 2012?

posso eseguire lo script in modalità debug e posizionare i punti di interruzione, così come passo attraverso il mio script, ma non riesco a vedere i valori memorizzati nelle mie variabili di tabella.

Nella finestra Locals vedo tutte queste variabili, ma è mostrato il loro valore come (table):

Locals window

Non v'è alcun modo per visualizzare il contenuto della variabile tramite il menu contestuale o facendo clic su la variabile.

Ho provato a utilizzare Immediate Window per eseguire una query sulla variabile di tabella, ma questo sembra non funzionare neanche.

Immediate Window

Qualsiasi idea di come posso ottenere i valori dal mio variabili di tabella nella sessione di debug?

+0

Eventuali duplicati di [Come vedere i valori di una variabile di tabella in fase di debug in T-SQL?] (Http://stackoverflow.com/questions/1900857/how-to-see -the-values-of-a-table-variable-at-debug-time-in-t-sql) – Faiz

risposta

12

Anche se non riesco a trovare alcuna documentazione, ovunque, in cui si afferma esplicitamente che non è possibile controllare le variabili di tabella, non credo che sia possibile. Da Transact-SQL Debugger

La gente del posto eGuarda. Queste finestre visualizzano le espressioni Transact-SQL attualmente assegnate. Le espressioni sono clausole Transact-SQL che valutano una singola espressione scalare. Il debugger Transact-SQL supporta le espressioni di visualizzazione che fanno riferimento a variabili Transact-SQL, parametri o funzioni incorporate con nomi che iniziano con @@. Queste finestre mostrano anche i valori dei dati attualmente assegnati alle espressioni.

(mia enfasi)

Cioè, si può controllare solo gli scalari.

Per quanto riguarda il tuo tentativo di utilizzare la finestra immediata, il Limitations on Debugger Command and Features dice:

viene visualizzata la Finestra Immediata , ma non si può fare qualcosa di utile con esso, come ad esempio impostare una variabile per un valore, o interrogando il database.


non ho mai usato davvero il debugger molto - ogni volta che ho guardato dentro, ho incontrato le limitazioni di questo tipo.

Ecco perché ho ancora tendono ad usare "vecchia scuola"/"printf" approcci per eseguire il debug SQL - comprendono in più SELECT * s liberamente in tutto il codice che mostra lo stato attuale delle tabelle, ed extra PRINT o RAISERROR messaggi che mostrano altri stati , ecc. E poi esegui normalmente il codice, fino a quando non lo hai colpito in una forma.

+0

Grazie per la tua ricerca, la mia non ha prodotto alcun risultato. Semplicemente non volevo credere che non fosse possibile, perché rende il debugger completamente inutilizzabile ai miei occhi. Il problema con "old-skool" -debugging è che abbiamo appena "pettinato" il codice per non contenere alcuna istruzione debug/commentata/irraggiungibile (come richiesto dalla nostra politica di codifica) e ho bisogno di riportarli di nuovo ... –

9

Utilizzando il codice successivo è possibile visualizzare il contenuto della tabella in formato XML.

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

È utile verificare quali sono le istruzioni SELECT restituite. L'ho provato e funziona.

Ulteriori informazioni here.

+1

Questo non funziona. Non riesco a vedere la finestra di @v nella gente del posto. – Naren

+1

@Naren Ho verificato questo. Funziona nella finestra locale e posso vedere i valori popolati nella variabile @v. Sto usando lo studio di gestione SQL Server per SQL Server 2008 R2. – RBT

+0

È possibile aggiungere ", ROOT ('rootNodeName')" alla clausola "FOR XML". Questo raccoglierà più righe (se presenti) sotto una singola radice, il che rende un documento XML legale, che può essere visualizzato con il visualizzatore XML al posto del visualizzatore di testo. – JohnL4

1

ho semplicemente messo in alcune dichiarazioni nel mio script e lo visualizza nella finestra risultati ..

select * from @VarTable;

ora mentre passo attraverso il mio codice e clicco sulla selezione visualizzerò i valori. Quindi li commento quando ho finito di testare o impostare un flag di test.

Spero che questo aiuti