Question

Est-ce que quelqu'un sait s'il est possible d'utiliser le Visual Studio / SQL Server Management Studio pour débogueur inspecter le contenu d'une table de valeurs paramètre passé à une procédure stockée?

Pour donner un exemple trivial:

CREATE TYPE [dbo].[ControllerId] AS TABLE(
    [id] [nvarchar](max) NOT NULL
)
GO

CREATE PROCEDURE [dbo].[test]
    @controllerData [dbo].[ControllerId] READONLY
AS
BEGIN
    SELECT COUNT(*) FROM @controllerData;
END

DECLARE @SampleData as [dbo].[ControllerId];
INSERT INTO @SampleData ([id]) VALUES ('test'), ('test2');

exec [dbo].[test] @SampleData;  

En utilisant ce qui précède avec un point de rupture sur l'instruction exec, je suis en mesure d'intervenir dans la procédure stockée sans aucun problème. Le débogueur montre que la section locale @controllerData a une valeur de "(tableau) mais je n'ai pas trouvé un outil qui me permettra de voir les réelles lignes qui composent cette table.

Était-ce utile?

La solution

Puisque vous obtenez pas de joie du débogueur, est ma suggestion. Vous ajoutez un varaiable d'entrée pour déterminer si elle est en mode test ou non. Ensuite, si elle est en mode test, exécutez la sélection en haut de la sp pour voir ce que les données.

CREATE TYPE [dbo].[ControllerId] AS TABLE( 
    [id] [nvarchar](max) NOT NULL 
) 
GO 

CREATE PROCEDURE [dbo].[jjtest] 
    (@controllerData [dbo].[ControllerId] READONLY 
    , @test bit = null)
AS 
IF @test = 1
BEGIN
SELECT * FROM  @controllerData
END
BEGIN 
    SELECT COUNT(*) FROM @controllerData; 
END 
GO

DECLARE @SampleData as [dbo].[ControllerId]; 
INSERT INTO @SampleData ([id]) VALUES ('test'), ('test2'); 

EXEC [dbo].[jjtest] @SampleData, 1;  

Autres conseils

Je suis pas réussi à essayer de faire la même chose que vous avez décrit. Donc je suppose que ce n'est pas encore possible. Attendra SSMS 2010

Il est impossible pour les variables de table, mais je construit procédure qui permet d'afficher le contenu d'un table temporaire d'une autre connexion de base de données. (Ce qui est impossible avec les requêtes normales). Notez qu'il utilise DBCC PAGE et la trace par défaut pour accéder aux données doit être utilisée qu'en pour des fins de débogage.

Vous pouvez l'utiliser en mettant un point d'arrêt dans votre code, l'ouverture d'une seconde connexion et appelant:

exec sp_select 'tempdb..#mytable'

Il y a une solution, je pense que vous pouvez créer une autre procédure stockée et remplissez le paramètre de valeur de la table et appelez votre procédure principale et vous commencez le débogage de la procédure de test que vous avez fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top