从SQL Server临时表导出/查看数据

从SQL Server临时表导出/查看数据,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张临时桌子,它不会消失的。我想看看表中有什么,以确定其中可能有哪些坏数据。如何查看临时表中的数据 我可以在tempdb中看到它。我跑 获取表的名称 我可以在中看到它的列及其对象id 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%' 我怎样才能得到这些数据 顺便说一下,这不管

我有一张临时桌子,它不会消失的。我想看看表中有什么,以确定其中可能有哪些坏数据。如何查看临时表中的数据

我可以在tempdb中看到它。我跑

获取表的名称

我可以在中看到它的列及其对象id

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 

这似乎是你明显尝试过的事情,但既然你没有提到,我想我会提到以防万一:


是否尝试从返回记录中选择*?

SQL Server将对本地临时表TableName的访问限制为创建该表的连接。全局临时表TableName可以由其他连接访问,只要创建它的连接仍处于连接状态

即使您可以在表目录中看到该表,但在尝试执行选择操作时,该表是不可访问的。它给您一个无效的对象名错误


没有记录在案的方法来访问由其他连接创建的本地临时表中的数据。我认为您在这种情况下可能运气不佳。

就像JoséBasilio所说的,这是属于另一个连接的临时表。如果它存在很长时间,它必须属于一个已打开很长时间的连接。检查维护->活动监视器;您可以按登录时间排序

检查登录时间或上次批处理时间是否与临时表的创建日期匹配。可通过以下方式检索:

select crdate from tempdb.dbo.sysobjects WHERE Name LIKE '#Return_Records%'
您可以击落可疑连接,右键单击并终止进程。如果在杀死一个进程后该表不见了,那么您就找到了罪魁祸首


要仅删除该表,请重新启动SQL Server服务。您可以在连接SQL事件探查器之后立即使用筛选器开始查找创建临时表的连接。

以低级且不太容易操作的方式获取数据的一种方法是使用DBCC PAGE命令,如Paul Randal在博客文章中所述:

您应该能够通过查询sysindex找到对象中第一页的fileid和页码。。我上次这样做是在SQLServer7上

如果数据在数据库中,那么DBCC page将能够转储它


pjjH

您使用的是什么版本的SQLServer?您的问题似乎是它不会消失。您正在与软件的一个基本的有意设计特征作斗争。听起来好像这里涉及到一些政治敏感的糟糕设计决策。我知道。。。但我希望有一种无文件记录的方法来获取数据。如果数据库中有数据,就必须有人来获取它。我刚刚得到了一份由Paul Randal编写的关于DBCC的章节。我希望能够继续使用可执行示例。创建表fooi integer,t varcharmax INSERT fooi,t VALUES42,'这不是香蕉'dbcc ind'tempdb','foo',-1 dbcc page'tempdb',1210,3和TABLERESULTS[-]插槽0偏移量0x60长度35内存转储@0x417DC060 00000014:6973206e 6f742061 2062616e 616e61††††††††††††††††††††††††††††††††††††††††††††††††††††††插槽0第2列偏移量0xf长度20物理长度20 417D13D4:74686973 20697320 6e6f7420 61206261 6e616e61†对于上一条注释中的borked格式,这不是bananaSorry。在我的工作中记录的程序。我不知道DBCC IND。
select crdate from tempdb.dbo.sysobjects WHERE Name LIKE '#Return_Records%'