我使用的是 SQLServer2008。假设我创建了一个像下面这样的临时表:
create table #MyTempTable (col1 int,col2 varchar(10))
如何动态检索字段列表:
Fields: col1 col2
我想查询 sys.column,但它似乎没有存储任何关于临时表的信息?
临时表是在“ temdb”中定义的,表名是“混淆的”。
这个查询应该可以解决这个问题:
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%'
马克
select * from tempdb.sys.columns where object_id = object_id('tempdb..#mytemptable');
select * from tempdb.INFORMATION_SCHEMA.COLUMNS where table_name like '#MyTempTable%'
安东尼
试试下面这个,它会给你预期的输出
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%'
你也可以按照下面的方法来做。
create table #test (a int, b char(1)) select * From #test exec tempdb..sp_columns '#test'
使用 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'))
select * from tempdb.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=OBJECT_NAME(OBJECT_ID('#table'))