web-dev-qa-db-ja.com

SQLServerのクエリから列名を取得する方法

SQLServerの使用。

非常に広範なクエリがあり、エイリアシングなどがたくさんあります...

SQLだけを使用して(ストアドプロシージャは問題ありませんが、PHPなどは問題ありません)、このクエリからすべての列名のリストを取得する方法はありますか? (おそらくこのソリューション内にクエリを埋め込む必要があることはわかっていますが、それは問題ありません。一時的な対策です。)

ありがとう!

8
WebDevGuy2

SQL Server 2012以降を使用している場合は、 sys.dm_exec_describe_first_result_set を利用できます。

SELECT name 
FROM 
sys.dm_exec_describe_first_result_set
('Your Query Here', NULL, 0) ;

[〜#〜]デモ[〜#〜]

13
Conrad Frix

これはコメントするには長すぎます。

クエリからcolumnsを取得するには、次のようなさまざまな方法があります。

select top 0 s.*
from (<your query here>) s;

次に、結果を解析できます。

ただし、別のアプローチが役立つことがわかりました。同じロジックを使用して、ビューまたはテーブルを作成します。

select top 0 s.*
into _TempTableForColumns
from (<your query here>) s;

次に、information_schema(または必要に応じてシステムテーブル)を使用します。

select *
from information_schema.columns
where table_name = '_TempTableForColumns' and schema_name = 'dbo';

drop table _TempTableForColumns;

このアプローチの利点は、列名とともに型情報を取得できることです。ただし、エンジンは引き続きクエリを実行する必要があり、行が返されない場合でも時間がかかる場合があります。列の名前とタイプはコンパイル後に使用できますが、クエリを実行せずにそれらを取得する方法を知りません。

6
Gordon Linoff

SQL Server2008以降

select * 
from sys.columns c 
inner join sys.objects o on c.object_id = o.object_id 
where o.name = 'TableName'

select * 
from syscolumns c 
inner join sysobjects o on c.id = o.id 
where o.name = 'TableName'
0
Jason Lou