Можно ли проверить содержимое параметра табличного значения через отладчик? - PullRequest
1 голос
/ 09 июня 2010

Кто-нибудь знает, возможно ли использовать отладчик Visual Studio / SQL Server Management Studio для проверки содержимого параметра табличного значения, передаваемого в хранимую процедуру?

Чтобы дать тривиальный пример:

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;  

Используя вышеприведенное с точкой останова в операторе exec, я могу без проблем войти в хранимую процедуру.Отладчик показывает, что у @controllerData local есть значение '(таблица)', но я не нашел никакого инструмента, который позволил бы мне реально просматривать строки, составляющие эту таблицу.

Ответы [ 4 ]

1 голос
/ 09 июня 2010

Поскольку вы не получаете удовольствия от отладчика, вот мое предложение. Вы добавляете переменный ввод, чтобы определить, находится ли он в тестовом режиме или нет. Затем, если он находится в тестовом режиме, запустите команду select в верхней части sp, чтобы увидеть, что это за данные.

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;  
1 голос
/ 01 августа 2011

Это невозможно для табличных переменных, но я создал процедуру , которая будет отображать содержимое временной таблицы из другого соединения с базой данных. (что невозможно с обычными запросами). Обратите внимание, что для доступа к данным используется DBCC PAGE & трассировка по умолчанию, поэтому используйте ее только в целях отладки.

Вы можете использовать его, вставив точку останова в свой код, открыв второе соединение и позвонив по телефону:

exec sp_select 'tempdb..#mytable'

1 голос
/ 09 июня 2010

Я безуспешно пытаюсь сделать то же, что вы описали. Так что я думаю, что это пока невозможно. Будем ждать SSMS 2010

0 голосов
/ 07 октября 2011

Существует решение, которое, я думаю, вы можете создать еще одну хранимую процедуру и заполнить параметр табличного значения и вызвать вашу основную процедуру, а затем вы начнете отладку из процедуры тестирования, которую вы сделали.

...