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?
select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
select *
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'
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'))
Les tables temporaires sont définies dans "tempdb" et les noms des 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
vous pouvez le faire en suivant aussi ..
create table #test (a int, b char(1))
select * From #test
exec tempdb..sp_columns '#test'
Anthony
essayez celui ci-dessous. cela donnera votre résultat attendu
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'))