73

我正在使用 SQL Server 2008。假设我创建了一个像这样的临时表:

create table #MyTempTable (col1 int,col2 varchar(10))

如何动态检索字段列表?我想看到这样的东西:

Fields:
col1
col2

我正在考虑查询 sys.columns 但它似乎没有存储有关临时表的任何信息。有任何想法吗?

4

7 回答 7

137
select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
于 2009-04-16T13:27:18.510 回答
30
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'
于 2009-04-16T13:27:19.417 回答
8

要使用 information_schema 并且不与其他会话发生冲突:

select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name =
    object_name(
        object_id('tempdb..#test'),
        (select database_id from sys.databases where name = 'tempdb'))
于 2013-06-13T22:17:26.903 回答
7

临时表在“tempdb”中定义,表名是“mangled”。

这个查询应该可以解决问题:

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

马克

于 2009-04-16T13:26:07.267 回答
3

你也可以通过以下方式做到这一点..

create table #test (a int, b char(1))

select * From #test

exec tempdb..sp_columns '#test'
于 2013-04-24T05:55:55.450 回答
1

安东尼

试试下面的。它会给你预期的输出

select c.name as Fields from 
tempdb.sys.columns c
    inner join tempdb.sys.tables t
 ON c.object_id = t.object_id
where t.name like '#MyTempTable%'
于 2012-11-27T13:54:35.083 回答
0
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME=OBJECT_NAME(OBJECT_ID('#table'))
于 2017-10-09T13:50:23.547 回答