Запросить временную таблицу в хранимом процессе во время отладки в SQL 2008 Management Studio - PullRequest
19 голосов
/ 22 января 2011

У меня действительно большая хранимая процедура, которая вызывает другие хранимые процедуры и применяет результаты в временных таблицах.

Я отлаживаю в SQL 2008 Management Studio и могу использовать окно наблюдения для запроса локальных параметров, но как я могу запросить временную таблицу при отладке?

Если это невозможно, есть ли альтернативный подход? Я читал об использовании табличных переменных, возможно ли будет запросить их? Если так, то как бы я это сделал?

Ответы [ 4 ]

14 голосов
/ 01 августа 2011

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

14 голосов
/ 22 января 2011

Используйте глобальные временные таблицы, то есть с двойным хешем.

insert into ##temp select ...

Во время отладки вы можете приостановить SP в какой-то момент, а в другом окне запроса таблица ## доступна для запросов.

select * from ##temp

Одиночные хеш-таблицы (#tmp) зависят от сеанса и видны только из сеанса.

1 голос
/ 30 марта 2011

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

я использую переменную с именем @debug_out (BIT).

работает примерно так

ALTER PROCEDURE [dbo]. [Usp_someProc]

@ some_Var VARCHAR (15) = 'AUTO',

@ debug_Out BIT = 0

BEGIN

  IF @debug_Out = 1
       BEGIN
            PRINT('THIS IS MY TABLE');
            SELECT * FROM dbo.myTable;
       END ................ 

END

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

EXEC usp_someProc @ debug_Out = 1

0 голосов
/ 22 января 2011

просто не удаляйте временную таблицу и не закрывайте транзакцию

например

select * into #temp from myTable

select * from #temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...