我有一张临时桌子,不会消失。我想看看表中的内容,以确定那里可能存在哪些不良数据。如何查看临时表中的数据?
我可以在tempdb
中看到它。我跑了
SELECT * FROM tempdb.dbo.sysobjects WHERE Name LIKE '#Return_Records%'
获取表格的名称。
我可以在
中看到它的列和对象IDselect 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 :(得分:1)
SQL Server将对本地临时表(#TableName)的访问权限限制为创建表的连接。只要创建连接的连接仍然连接,其他连接就可以访问全局临时表(## TableName)。
即使您可以在表目录中看到该表,但在尝试执行SELECT时也无法访问该表。它会为您提供“无效的对象名称”错误。
没有记录的方法来访问由其他连接创建的本地临时表中的数据。我认为在这种情况下你可能会失败。
答案 1 :(得分:1)
以低级别而不是特别容易操作的方式获取数据的一种方法是使用Paul Randal在博客文章中描述的DBCC PAGE命令:
http://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/10/625659.aspx
您应该能够通过查询sysindexes找到对象中第一页的fileid和页码..上次我这样做是在SQL Server 7上。
如果数据在数据库中,那么DBCC页面将能够转储它。
pjjH
答案 2 :(得分:0)
这似乎是你明显尝试过的,但是既然你没有提到它,我会提到以防万一:
您是否尝试过“SELECT * FROM #Return_Records”?
答案 3 :(得分:0)
就像何塞·巴西利奥所说,那是属于另一个连接的临时表。如果它存在很长时间,它必须属于已经打开很长时间的连接。检查维护 - >能力监测;您可以按登录时间排序。
检查登录时间或上次批次时间是否与临时表的创建日期匹配。可以通过以下方式检索:
select crdate from tempdb.dbo.sysobjects WHERE Name LIKE '#Return_Records%'
你可以击落可疑的连接(右击和杀死进程。)如果在杀死进程后桌子消失了,你就找到了罪魁祸首。
要删除表,请重新启动SQL Server服务。您可以使用过滤器立即附加SQL事件探查器,以开始查找创建临时表的连接。