如何从临时表中检索字段名称(SQL Server 2008)

Ant*_*ony 67 sql sql-server temp-tables sql-server-2008

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

create table #MyTempTable (col1 int,col2 varchar(10))
Run Code Online (Sandbox Code Playgroud)

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

Fields:
col1
col2
Run Code Online (Sandbox Code Playgroud)

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

kri*_*tof 125

select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
Run Code Online (Sandbox Code Playgroud)

  • 验证此方法不会从通过其他连接创建的#temp表中返回数据。使用LIKE#temp%的替代方法可以。 (2认同)

Ed *_*ess 28

select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'
Run Code Online (Sandbox Code Playgroud)

  • 这个答案更好.包含表名以及列的数据类型.如果您的where子句包含临时表列表,那么这更加优越,因为您可以区分哪些列来自临时表 (4认同)
  • Downvoted as:验证接受的答案不会返回通过不同连接创建的#temp表中的数据.这种方法可以.接受的答案更加安全. (2认同)

qui*_*ker 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'))
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 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%'
Run Code Online (Sandbox Code Playgroud)

  • 我认为这可能会跨越范围.如果它是一次性代码,那很好.如果它的代码将具有真正的寿命,问题. (2认同)