2009-06-04 2 views
0

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

Я вижу это в 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 
+0

Какую версию SQLServer вы используете? –

+0

sql server 2005 –

+0

Ваша проблема заключается в том, что «она не уходит». Вы боретесь с основным умышленным дизайном, характерным для программного обеспечения. (Похоже, здесь есть какое-то политически чувствительное плохое дизайнерское решение.) – dkretz

ответ

1

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

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

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

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

pjjH

+0

Я только что получил свою копию http://www.amazon.com/Microsoft%C2%AE-SQL-Server%C2%AE-2008-Internals/dp/0735626243, в которой есть глава о DBCC, написанная Полом Рэндалом. Я надеюсь, что смогу следить за исполняемыми примерами. –

+0

CREATE table #foo (i integer, t varchar (max)) INSERT #foo (i, t) VALUES (42, 'это не банан') dbcc ind ('tempdb', '#foo', - 1) DBCC страницы ('Tempdb', 1, 210, 3) С TABLERESULTS [-] Слот 0 смещение Длина 0x60 35 \t дамп памяти @ 0x417DC060 \t \t 00000014: 6973206e 6f742061 2062616e 616e61 †††††††† ††††† не банан Слот 0 смещение Длина 0x60 35 \t Слот 0 Колонка 1 смещение 0x4 Длина 4 Длина (физический) 4 \t \t я 42 Слот 0 смещение 0x60 Длина 35 \t т = [BLOB-Инлайн данных] Слот 0 Столбец 2 Смещение 0xf Длина 20 Длина (физическая) 20 \t \t 417D13D4: 74686973 20697320 6e6f7420 61206261 6e616e61 † Это не банан –

+0

Извините за форматирование borked в предыдущем комментарии. Процедура, описанная в http://www.mssqltips.com/tip.asp?tip=1578, работает для меня. Я не знал о DBCC IND. –

0

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

Вы пытались «SELECT * FROM #Return_Records»?

+3

это не работает, я определенно пробовал это первое –

1

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

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

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

+0

Это я знал ... но я надеялся, что есть не документированный способ получить данные , Если данные находятся в БД, должен быть кто-то, кто может это сделать. –

0

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

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

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

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

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

Смежные вопросы