Временная таблица запросов в хранимой процедуре во время отладки в SQL 2008 Management Studio
У меня есть очень большая хранимая процедура, которая вызывает другие хранимые процедуры и применяет результаты к временным таблицам.
Я отлаживаю в SQL 2008 Management Studio и могу использовать окно просмотра для запроса локальных параметров, но как я могу запросить временную таблицу во время отладки?
Если не представляется возможным альтернативный подход? Я прочитал об использовании табличных переменных вместо этого, можно ли их запросить? Если да, то как мне это сделать?
Ответы
Ответ 1
Использовать глобальные временные таблицы, т.е. с двойным хешем.
insert into ##temp select ...
Во время отладки вы можете приостановить SP в какой-то момент, а в другом окне запроса доступна таблица ## для запроса.
select * from ##temp
Отдельные хеш-таблицы (#tmp) являются специфичными для сеанса и видны только из сеанса.
Ответ 2
Я построил процедуру, которая отобразит содержимое временной таблицы из другого соединения с базой данных. (что невозможно с обычными запросами).
Обратите внимание, что он использует DBCC PAGE и трассировку по умолчанию для доступа к данным, поэтому используйте их только для целей отладки.
Ответ 3
альтернативой будет использование переменной в вашем сохраненном proc, которая позволяет отлаживать "на лету".
Я использую переменную @debug_out (BIT).
работает что-то вроде этого
ALTER PROCEDURE [dbo]. [usp_someProc]
@some_Var VARCHAR (15) = 'AUTO',
@debug_Out BIT = 0
НАЧАТЬ
IF @debug_Out = 1
BEGIN
PRINT('THIS IS MY TABLE');
SELECT * FROM dbo.myTable;
END ................
КОНЕЦ
Самое замечательное в этом - когда ваш код запускает вашу хранимую процедуру, по умолчанию не отображается ни один из этих разделов отладки. когда вы хотите отлаживать, вы просто передаете свою отладочную переменную.
EXEC usp_someProc @debug_Out= 1
Ответ 4
просто не удаляйте временную таблицу или закрывайте транзакцию
eg
select * into #temp from myTable
select * from #temp