我正在使用SQL Server 2008。 假设我创建了一个临时表,如下所示:
create table #MyTempTable (col1 int,col2 varchar(10))
我如何动态检索字段列表?我想看到类似于这样的内容:
Fields:
col1
col2
我在考虑查询sys.columns,但它似乎没有存储任何关于临时表的信息。有什么想法吗?
我正在使用SQL Server 2008。 假设我创建了一个临时表,如下所示:
create table #MyTempTable (col1 int,col2 varchar(10))
我如何动态检索字段列表?我想看到类似于这样的内容:
Fields:
col1
col2
我在考虑查询sys.columns,但它似乎没有存储任何关于临时表的信息。有什么想法吗?
select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
select *
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'
使用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'))
临时表定义在 "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%'
马克
create table #test (a int, b char(1))
select * From #test
exec tempdb..sp_columns '#test'
exec tempdb..sp_columns '#test'
- yzorg安东尼
请尝试下面的代码,它将会给出您期望的输出结果。
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'))
select name from tempdb.sys.tables
获取所有临时表的名称。 - Raaghav