Просмотр временной таблицы, созданной из хранимой процедуры

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

Спасибо Винод Т

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
6
0
62 122
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

После этого вы можете вернуть его обратно. Если вы не можете испортить исходную процедуру, скопируйте ее и отредактируйте копию.

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

Vinod 24.09.2008 12:30

В BIDS или SSMS подобной функциональности нет. Вам нужно будет явно изменить sproc, чтобы где-то записывать содержимое таблицы, или выбрать их, чтобы sproc возвращал наборы записей для отладки. Не забудьте после этого прокомментировать отладочный код.

ConcernedOfTunbridgeWells 24.09.2008 12:35

Это или его варианты являются основным подходом к отладке sprocs. +1

ConcernedOfTunbridgeWells 24.09.2008 12:36
Ответ принят как подходящий

Есть несколько видов временных таблиц, я думаю, вы могли бы использовать таблицу, которая не удаляется после того, как SP использовал ее. Просто убедитесь, что вы не вызываете один и тот же SP дважды, иначе вы получите ошибку при попытке создать существующую таблицу. Или просто отбросьте временную таблицу после того, как увидите ее содержимое. Поэтому вместо использования табличной переменной (@table) просто используйте #table или ##table.


От http://arplis.com/ Contemporary-tables-in-microsoft-sql-server/:

Локальные временные столы

  • Префикс локальных временных таблиц со знаком единственного числа (#) в качестве первого символа их имен, например (#table_name).
  • Локальные временные таблицы видны только в текущем сеансе ИЛИ вы можете сказать, что они видны только текущему соединению для пользователя. Они удаляются, когда пользователь отключается от экземпляров Microsoft SQL Server.

Глобальные временные таблицы

  • Префикс глобальных временных таблиц со знаком двойного числа (##) в качестве первого символа их имен, например (## table_name).
  • Глобальные временные таблицы видны всем сеансам ИЛИ вы можете сказать, что они видны любому пользователю после их создания.
  • Они удаляются, когда все пользователи, обращающиеся к таблице, отключаются от Microsoft SQL Server.

Это то, что сразу же пришло мне в голову. +1.

ConcernedOfTunbridgeWells 24.09.2008 12:34

Чтобы уточнить: я изменил SP и изменил # <tablename> на ## <tablename>, переместив временные таблицы в глобальное пространство. Используйте отладчик VS для пошагового выполнения сохраненной процедуры, остановки после заполнения временной таблицы и, наконец, отдельного SQL-соединения для опроса (теперь глобальной) временной таблицы.

MarcE 30.10.2008 22:52

Это мне помогло.

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.

Другие вопросы по теме