69 votes

Comment récupérer les noms de champs d'une table temporaire (SQL Server 2008)

J'utilise SQL Server 2008. Imaginons que je crée une table temporaire comme celle-ci:

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

Comment puis-je récupérer la liste des champs de manière dynamique? Je voudrais voir quelque chose comme ça:

 Fields:
col1
col2
 

Je pensais interroger sys.columns mais cela ne semble pas stocker d'informations sur les tables temporaires. Des idées?

129voto

kristof Points 18322
select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');

29voto

Ed Guiness Points 21866
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'

8voto

quillbreaker Points 2843

Pour utiliser information_schema et ne pas entrer en collision avec d'autres sessions:

 select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name =
    object_name(
        object_id('tempdb..#test'),
        (select database_id from sys.databases where name = 'tempdb'))
 

7voto

marc_s Points 321990

Les tables temporaires sont définies dans "tempdb" et les noms de tables sont "mutilés".

Cette requête devrait faire l'affaire:

 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

3voto

Nishad Points 128

vous pouvez le faire en suivant aussi ..

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

select * From #test

exec tempdb..sp_columns '#test'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X