Просмотреть временную таблицу, созданную из хранимой процедуры - PullRequest
5 голосов
/ 24 сентября 2008

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

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

Ответы [ 6 ]

14 голосов
/ 24 сентября 2008

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


С http://arplis.com/temporary-tables-in-microsoft-sql-server/:

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

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

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

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

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

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

5 голосов
/ 20 апреля 2011

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

См. sp_select проект на github.

Содержимое таблицы можно отобразить, запустив exec sp_select 'tempdb..#temp' независимо от того, какой сеанс.

3 голосов
/ 04 января 2012

Итог: отладчик Visual Studio Microsoft по умолчанию не находится в том же сеансе, что и исполняемый и отлаживаемый код SQL.

Таким образом, вы можете ТОЛЬКО просматривать таблицы #temp, переключая их на глобальные ## временные таблицы или постоянные таблицы или любую другую технику, которая вам больше нравится, которая работает между сеансами.

примечание: это ОЧЕНЬ отличается от обычных языковых отладчиков ... и я подозреваю Microsoft специально для этого ... Я видел сторонние средства отладки SQL десятилетия назад это не было этой проблемы.

Нет веских технических причин, по которым отладчик не может находиться в том же сеансе, что и ваш код SQL, что позволяет вам проверять все созданные схемы, включая таблицы #temp.

1 голос
/ 24 сентября 2008

Чтобы расширить предыдущие предложения о переносе данных в постоянную таблицу, вы можете попробовать следующее:

-- Get rid of the table if it already exists
if object_id('TempData') is not null
  drop table TempData

select * into TempData from #TempTable
1 голос
/ 24 сентября 2008

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

SELECT * FROM #Name

USE [TEMPDB]
GO

SELECT * FROM syscolumns 
   WHERE id = ( SELECT id FROM sysobjects WHERE [Name] LIKE '#Name%')

это дает подробности всей временной таблицы

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