简体   繁体   English

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

[英]How to retrieve field names from temporary table (SQL Server 2008)

I'm using SQL Server 2008. Say I create a temporary table like this one: 我正在使用SQL Server 2008.假设我创建了一个像这样的临时表:

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

How can I retrieve the list of fields dynamically? 如何动态检索字段列表? I would like to see something like this: 我想看到这样的事情:

Fields:
col1
col2

I was thinking of querying sys.columns but it doesn't seem to store any info about temporary tables. 我在考虑查询sys.columns但它似乎没有存储任何关于临时表的信息。 Any ideas? 有任何想法吗?

select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'

To use information_schema and not collide with other sessions: 要使用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'))

The temporary tables are defined in "tempdb", and the table names are "mangled". 临时表在“tempdb”中定义,表名称为“mangled”。

This query should do the trick: 这个查询应该做的伎俩:

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%'

Marc

you can do it by following way too .. 你也可以通过以下方式来做到这一点。

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

select * From #test

exec tempdb..sp_columns '#test'

Anthony 安东尼

try the below one. 试试下面的一个。 it will give ur expected output 它会给你预期的输出

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%'
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME=OBJECT_NAME(OBJECT_ID('#table'))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM