Pregunta

¿Alguien sabe si es posible utilizar el Visual Studio / SQL Server Management Studio debugger para inspeccionar el contenido de una Tabla de Valor de Parámetro que se pasa a un procedimiento almacenado?

Para dar un ejemplo 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;  

Utilizando la anterior con un punto de interrupción en la instrucción exec, soy capaz de intervenir en el procedimiento almacenado, sin ningún problema.El depurador muestra que @controllerData local tiene un valor de " (tabla)", pero no he encontrado ninguna herramienta que me permitiera vista actual de las filas que componen la tabla.

¿Fue útil?

Solución

Desde que se obtiene ninguna alegría desde el depurador, aquí está mi sugerencia. Agrega una varaiable entrada para determinar si está en modo de prueba o no. A continuación, si está en TestMode, ejecute la selección en la parte superior de la SP para ver lo que será la información.

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;  

Otros consejos

No tengo éxito tratando de hacer lo mismo lo que usted describe. Así que supongo que aún no es posible. Esperará a que SSMS 2010

No es posible que las variables de tabla, pero construido un procedimiento que mostrará el contenido de una tabla temporal de otra conexión de base de datos. (Que no es posible con las consultas normales). Note que usa DBCC PAGE y la traza por defecto el acceso a los datos por lo que sólo lo utilizan para fines de depuración.

Se puede utilizar al poner un punto de interrupción en el código, la apertura de una segunda conexión y llamando a:

exec sp_select 'tempdb..#mytable'

Hay una solución creo que se puede crear otro procedimiento almacenado y llenar el parámetro de valor de la tabla y la llamada del procedimiento principal y luego iniciar la depuración del procedimiento de pruebas que ha realizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top