web-dev-qa-db-ja.com

一時テーブルからフィールド名を取得する方法(SQL Server 2008)

SQL Server 2008を使用しています。次のような一時テーブルを作成するとします。

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

フィールドのリストを動的に取得するにはどうすればよいですか?私はこのようなものを見たいです:

Fields:
col1
col2

Sys.columnsのクエリを考えていましたが、一時テーブルに関する情報を保存していないようです。何か案は?

67
Anthony
select * from tempdb.sys.columns where object_id =
object_id('tempdb..#mytemptable');
123
kristof
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS
where table_name like '#MyTempTable%'
28
Ed Guiness

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
quillbreaker

一時テーブルは「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%'

マーク

7
marc_s

あなたも次の方法でそれを行うことができます..

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

select * From #test

exec tempdb..sp_columns '#test'
3
Nishad

アンソニー

以下を試してください。それはあなたの期待される出力を与えます

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%'
1
Franklin
select * 
from tempdb.INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME=OBJECT_NAME(OBJECT_ID('#table'))
0
elle0087