Comment voir les valeurs d'une variable de table au moment du débogage dans T-SQL?

187

Pouvons-nous voir les valeurs (lignes et cellules) dans une variable de table dans SQL Server Management Studio (SSMS) pendant le temps de débogage? Si oui, comment?

entrez la description de l'image ici

Faiz
la source

Réponses:

31

Ce n'est pas encore implémenté selon ce lien Microsoft Connect : Microsoft Connect

rortega
la source
2
Et nous voici en 2016. Pas mieux. Le lien Connect ne fonctionne plus non plus.
dotNET
5
Pour être honnête, ce n'est pas réellement une réponse car cela ne répond pas à la question, la question est de savoir comment le faire (pas si SSMS a une fonctionnalité pour cela), en indiquant que cela n'est pas implémenté alors qu'il existe des moyens d'afficher les valeurs n'est pas très utile.
Răzvan Flavius ​​Panda
1
Veuillez supprimer cette réponse. La réponse ci-dessous devrait être la réponse acceptée.
Vortex852456
2018, toujours non.
AgentFire
317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

Insérez l'instruction ci-dessus à l'endroit où vous souhaitez afficher le contenu de la table. Le contenu de la table sera rendu au format XML dans la fenêtre locale, ou vous pouvez l'ajouter @và la fenêtre de surveillance.

entrez la description de l'image ici

Kirby
la source
1
C'est certainement une solution suffisante pour que les petites tables soient présentées au format XML.
Faiz
4
Mais n'arrêtez toujours pas de lire! Une autre option géniale ci-dessous! Grand fil !!
Mike M
1
J'ai eu de grandes tables avec le XML pas très convivial à lire. Je prends une autre étape - copiez le XML et collez-le dans xmlgrid.net et vous pouvez voir le XML sous forme de tableau. La visualisation de table aide vraiment. En attente d'une version de SSMS qui a une visionneuse de table comme la visionneuse datatable dans Visual Studio.
Moiz Tankiwala
1
Vous pouvez ajouter ", ROOT ('rootNodeName')" à la clause "FOR XML". Cela collectera plusieurs lignes (le cas échéant) sous une seule racine, ce qui en fait un document XML légal, qui peut être visualisé avec le visualiseur XML au lieu du visualiseur de texte.
JohnL4
2
En utilisant SQL Server 2016 ou jamais, vous pouvez également utiliser la version JSON de ceci DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke
18

Ce projet https://github.com/FilipDeVos/sp_select a une procédure stockée sp_selectqui permet de sélectionner à partir d'une table temporaire.

Usage:

exec sp_select 'tempDb..#myTempTable'

Lors du débogage d'une procédure stockée, vous pouvez ouvrir un nouvel onglet et exécuter cette commande pour voir le contenu de la table temporaire.

James Hulse
la source
6
Idéal pour les tables temporaires, mais pas pour les variables de table
Harag
Se bloque également s'il y a une transaction ouverte, donc peu utile si vous utilisez un débogage d'un test dans un framework tel que tSQLt qui ouvre toujours une transaction au début du test.
Nathan
1
WOW WOW WOW WOW
vothaison
Bien - ce serait génial si vous pouviez trier par une ou deux
colonnes
6

Dans la procédure stockée, créez une table temporaire globale ## tentable et écrivez une requête d'insertion dans votre procédure stockée qui insère les données de votre table dans cette table temporaire.

Une fois cela fait, vous pouvez vérifier le contenu de la table temporaire en ouvrant une nouvelle fenêtre de requête. Utilisez simplement "select * from ## temptable"

messi19
la source
1

Utilisez simplement la requête de sélection pour afficher la variable de table, là où vous souhaitez vérifier.

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

solairaja
la source
Oui, l'option la meilleure et la plus rapide convenue. Faites simplement ceci et mettez en surbrillance et exécutez uniquement le SQL que vous souhaitez exécuter si vous avez besoin de plus de contrôle.
Jammin
2
Utilisez la requête de sélection où, dans la fenêtre de surveillance?
Faiz
utilisez la sélection dans la procédure ou toute requête
ad hoc
Mais ce que j'ai besoin de tester, c'est une fonction valorisée par table et cela renvoie l'erreur "Les instructions de sélection incluses dans une fonction ne peuvent pas retourner de données à un client". Existe-t-il un autre moyen, spécialement pour examiner via les outils de débogage fournis?
Faiz
3
Non, cela ne résout pas la question. Je pense que ce n'est pas possible sans plugins supplémentaires.
Faiz
1

Si vous utilisez SQL Server 2016 ou une version plus récente, vous pouvez également le sélectionner comme résultat JSON et l'afficher dans JSON Visualizer, il est beaucoup plus facile à lire qu'en XML et vous permet de filtrer les résultats.

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

entrez la description de l'image ici

Sousuke
la source
0

J'en suis venu à la conclusion que ce n'est pas possible sans plugins.

Faiz
la source
J'ai vu quelques aperçus de Visual Studio 2010. Très sophistiqué, complexe et détaillé ... et le démonstrateur ne savait pas si les tables temporaires pouvaient être visualisées en mode débogage. Peut-être quand il est sorti, mais je ne retiens pas mon souffle.
Philip Kelley
0

SQL Server Profiler 2014 répertorie le contenu du paramètre de valeur de table. Peut également fonctionner dans les versions précédentes. Activer SP: Démarrage ou RPC: événement terminé dans le groupe Procédures stockées et la colonne TextData et lorsque vous cliquez sur l'entrée dans le journal, vous aurez les instructions d'insertion pour la variable de table. Vous pouvez ensuite copier le texte et l'exécuter dans Management Studio.

Exemple de sortie:

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
la source
-1

Pourquoi ne pas simplement sélectionner le tableau et afficher la variable de cette façon?

SELECT * FROM @d
Kyle Hoener
la source
4
Veuillez expliquer comment procéder. L'ajout de a SELECT * FROM @Tableau script en cours de débogage n'émet pas de résultats dans la fenêtre de résultats.
StingyJack
-3

Désolé les gars, je suis un peu en retard à la fête, mais pour quiconque tombe sur cette question à une date ultérieure, j'ai trouvé le moyen le plus simple de le faire dans une procédure stockée:

  1. Créez une nouvelle requête avec tous les paramètres de procédure déclarés et initialisés en haut.
  2. Collez le corps de votre procédure.
  3. Ajoutez une bonne requête de sélection à l'ancienne immédiatement après l'initialisation de votre variable de table avec des données.
  4. Si 3. n'est pas la dernière instruction de la procédure, définissez un point d'arrêt sur la même ligne, démarrez le débogage et continuez directement vers votre point d'arrêt.
  5. Profit!!

La réponse de messi19 devrait être celle acceptée à mon humble avis, car elle est plus simple que la mienne et fait le travail la plupart du temps, mais si vous êtes comme moi et que vous avez une variable de table dans une boucle que vous voulez inspecter, cela fait bien le travail sans trop d'effort ni de plugins SSMS externes.

Kenny83
la source
C'est tout à fait le contraire de ce que le PO tente de faire.
Jamie Marshall