Экспорт / просмотр данных из временной таблицы SQL Server - PullRequest
0 голосов
/ 04 июня 2009

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

Я вижу это в tempdb. Я побежал

SELECT * FROM tempdb.dbo.sysobjects WHERE Name LIKE '#Return_Records%'

, чтобы получить имя таблицы.

Я вижу его столбцы и идентификатор объекта в

select c.*
from tempdb.sys.columns c
inner join tempdb.sys.tables t ON c.object_id = t.object_id
where t.name like '#Return_Records%'

Как я могу получить данные?

Кстати, это не работает

SELECT * FROM #Return_Records 

Ответы [ 4 ]

1 голос
/ 05 июня 2009

Одним из способов получения данных на низком уровне и не особенно простым в манипулировании способом является использование команды DBCC PAGE, как описано в блоге Пола Рэндала:

http://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/10/625659.aspx

Вы должны быть в состоянии найти идентификатор файла и номер страницы первой страницы в объекте, запрашивая sysindexes .. последний раз, когда я делал это на SQL Server 7.

Если данные находятся в базе данных, то страница DBCC сможет их выгружать.

pjjH

1 голос
/ 04 июня 2009

SQL Server ограничивает доступ к локальным временным таблицам (#TableName) подключением, создавшим таблицу. Глобальные временные таблицы (## TableName) могут быть доступны другим соединениям, если соединение, которое их создало, все еще подключено.

Даже если вы видите таблицу в каталоге таблиц, она недоступна при попытке выполнить SELECT. Выдает ошибку «Неверное имя объекта».

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

0 голосов
/ 05 июня 2009

Как говорит Хосе Базилио, это временная таблица, принадлежащая другому соединению. Если он существует долгое время, он должен принадлежать соединению, которое было открыто долгое время. Проверьте обслуживание -> Монитор чувствительности; Вы можете сортировать по времени входа в систему.

Проверьте, совпадает ли время входа или время последней партии с датой создания временной таблицы. Это можно получить с помощью:

select crdate from tempdb.dbo.sysobjects WHERE Name LIKE '#Return_Records%'

Вы можете сбить подозрительные соединения (щелкнуть правой кнопкой мыши и убить процесс.) Если после уничтожения процесса таблица исчезла, вы нашли виновника.

Чтобы просто удалить таблицу, перезапустите службу SQL Server. Вы можете присоединить SQL Profiler сразу после фильтра, чтобы начать поиск соединения, которое создает временную таблицу.

0 голосов
/ 04 июня 2009

Это то, что вы, очевидно, пытались, но, поскольку вы не упомянули об этом, я бы сказал, на всякий случай:

Вы пробовали "SELECT * FROM #Return_Records"?

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