結果セットから列名とタイプのリストを取得するにはどうすればよいですか?

dba.stackexchange https://dba.stackexchange.com/questions/2743

  •  16-10-2019
  •  | 
  •  

質問

次のクエリから結果を取り戻したとしましょう。

select * 
from sys.database_files;

任意の結果の場合、列名とタイプを照会できるようにして、テーブルを作成して結果を保存できるようにしたいと考えています。

T-SQLでこれを実行する良い方法は何ですか?

役に立ちましたか?

解決

どうですか:

SELECT * 
INTO YourTableName 
FROM sys.database_files;

他のヒント

パーティーに遅れましたが、SQL Server Denaliでのメタデータの強化について言及したと思いました。 SET FMTONLY ON, 、多くのアプリが今日使用しています)だけでなく、ターゲットテーブルを動的に構築するためにも(すべての解析とケースの作業なしでメタデータを引くことができません sys.columns)。簡単な例を次に示します。実際にクエリを実行して結果の形状を把握する必要がないことに注意してください。

DECLARE @sql NVARCHAR(MAX) = N'SELECT * FROM sys.database_files';

SELECT name, system_type_name, collation_name
    FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0)
    ORDER BY column_ordinal;

もちろん、いくつかの制限があります。複数のステートメントを含むクエリがある場合、名前の「first_result_set」というフレーズは、最初のステートメントに関する情報のみを受け取るという手がかりを与える必要があります それはデータを返します - リーディングで止まりません SET NOCOUNT ON; 例えば。また、直接または3部構成の名前を参照している場合、またはビューまたは同義語に従うことを試みている場合、問題が発生します。しかし、大部分のユースケースでは、これは歓迎すべき単純化になります。

12月にさらに詳細をブログに書き、他のメタデータの機能強化についても説明しました。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top