У меня есть хранимая процедура в SQL 2005. Хранимая процедура фактически создает временные таблицы в начале SP и удаляет их в конце. Сейчас я отлаживаю SP в VS 2005. Между SP я хотел бы знать содержимое временной таблицы. Может ли кто-нибудь помочь в просмотре содержимого временной таблицы во время выполнения.
Спасибо Винод Т


Отредактируйте хранимую процедуру, чтобы временно выбрать * из временных таблиц (возможно, в другую таблицу или файл, или просто в панель вывода) во время ее выполнения ..?
После этого вы можете вернуть его обратно. Если вы не можете испортить исходную процедуру, скопируйте ее и отредактируйте копию.
В BIDS или SSMS подобной функциональности нет. Вам нужно будет явно изменить sproc, чтобы где-то записывать содержимое таблицы, или выбрать их, чтобы sproc возвращал наборы записей для отладки. Не забудьте после этого прокомментировать отладочный код.
Это или его варианты являются основным подходом к отладке sprocs. +1
Есть несколько видов временных таблиц, я думаю, вы могли бы использовать таблицу, которая не удаляется после того, как SP использовал ее. Просто убедитесь, что вы не вызываете один и тот же SP дважды, иначе вы получите ошибку при попытке создать существующую таблицу. Или просто отбросьте временную таблицу после того, как увидите ее содержимое. Поэтому вместо использования табличной переменной (@table) просто используйте #table или ##table.
От http://arplis.com/ Contemporary-tables-in-microsoft-sql-server/:
Это то, что сразу же пришло мне в голову. +1.
Чтобы уточнить: я изменил SP и изменил # <tablename> на ## <tablename>, переместив временные таблицы в глобальное пространство. Используйте отладчик VS для пошагового выполнения сохраненной процедуры, остановки после заполнения временной таблицы и, наконец, отдельного SQL-соединения для опроса (теперь глобальной) временной таблицы.
Это мне помогло.
SELECT * FROM #Name
USE [TEMPDB]
GO
SELECT * FROM syscolumns
WHERE id = ( SELECT id FROM sysobjects WHERE [Name] LIKE '#Name%')
это дает подробную информацию о всей временной таблице
Чтобы расширить предыдущие предложения о переносе данных в постоянную таблицу, вы можете попробовать следующее:
-- Get rid of the table if it already exists
if object_id('TempData') is not null
drop table TempData
select * into TempData from #TempTable
Я создал несколько хранимых процедур, которые позволяют запрашивать содержимое временной таблицы, созданной в другом сеансе.
См. Проект sp_select на github.
Содержимое таблицы можно отобразить, запустив exec sp_select 'tempdb..#temp' из любого сеанса.
Итог: отладчик Microsoft Visual Studio по умолчанию не находится в том же сеансе, что и выполняемый и отлаживаемый код SQL.
Таким образом, вы можете просматривать таблицы #temp ТОЛЬКО, переключая их на глобальные временные таблицы ## или постоянные таблицы, или любой другой метод, который вам больше всего нравится, который работает во всех сеансах.
примечание: это ОЧЕНЬ отличается от отладчиков нормального языка ... и я подозреваю, что сохранил таким образом Microsoft намеренно ... Я видел сторонние инструменты отладчика SQL несколько десятилетий назад у этого не было этой проблемы.
Нет веских технических причин, по которым отладчик не может находиться в том же сеансе, что и ваш код SQL, что позволяет вам проверять все созданные конструкции, включая таблицы #temp.
Я думал об этом ... но количество столов, о которых я говорю, очень велико. Поэтому я хотел знать, могу ли я получить его в каком-нибудь месте, например, в окне часов.