Как извлечь имена полей из временной таблицы (SQL Server 2008) - PullRequest
67 голосов
/ 16 апреля 2009

Я использую SQL Server 2008. Скажем, я создаю временную таблицу, подобную этой:

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

Как я могу получить список полей динамически? Я хотел бы видеть что-то вроде этого:

Fields:
col1
col2

Я думал о запросе к sys.columns, но, похоже, он не хранит никакой информации о временных таблицах Есть идеи?

Ответы [ 7 ]

122 голосов
/ 16 апреля 2009
select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
28 голосов
/ 16 апреля 2009
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'
7 голосов
/ 14 июня 2013

Чтобы использовать 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'))
7 голосов
/ 16 апреля 2009

Временные таблицы определены в «tempdb», а имена таблиц «искажены».

Этот запрос должен помочь:

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

Марк

3 голосов
/ 24 апреля 2013

вы тоже можете сделать это следующим образом ..

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

select * From #test

exec tempdb..sp_columns '#test'
1 голос
/ 27 ноября 2012

Энтони

попробуйте ниже. это даст вам ожидаемый результат

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%'
0 голосов
/ 09 октября 2017
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME=OBJECT_NAME(OBJECT_ID('#table'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...