データベースの多くのテーブル/ビューから多数のフィールドを取得するSQLクエリがあります。サードパーティと統合するために仕様をまとめる必要があります。結果セットのデータ型をコンパイルする最も簡単な方法は何ですか?
明確化:
- 25以上のテーブル/ビューが関係しているため、テーブルレベルの関数は依然として面倒です。
- 現在、すべての作業はMicrosoft SQL ServerManagementStudioで行われています。
データベースの多くのテーブル/ビューから多数のフィールドを取得するSQLクエリがあります。サードパーティと統合するために仕様をまとめる必要があります。結果セットのデータ型をコンパイルする最も簡単な方法は何ですか?
明確化:
一時テーブルを使用して、いくつかの簡単な SQL ステートメントを使用して、結果列の型を表示できます。
一時テーブルは接続ローカル スコープであり、切断されるとクリアされるため、ビューよりも少し優れています。
必要なのは、次のようにいくつかのキーワードを挿入することだけです
SELECT
TOP 0 -- to speed up without access data
your,original,columns
INTO #T -- temp table magic
FROM originalTablesJoins
Order by anything
exec tempdb.sys.sp_columns #T
drop table #T
また;
SELECT TOP 0 *
INTO #T
FROM (
select your,original,columns from originalTablesJoins -- remove order by if any
) x
exec tempdb.sys.sp_columns #T
drop table #T
You can run the query with SET FMTONLY ON, but that might not help you to easily determine the data types returned, since you're working in management studio only. If it was me, I think I'd create a view temporarily with the same body as the stored procedure (you may have to declare variables for any parameters). You can then look at the columns returned by the view with the INFORMATION_SCHEMA queries already discussed.
SQL Server を使用している場合、さまざまなテーブルのメタデータがテーブルで利用できinformation_schema
ます。たとえば、テーブル Foo の列メタデータを取得するには、次のクエリを発行します。
SELECT * FROM information_schema.columns WHERE table_name = 'Foo'
C# を使用している場合は、DataRow オブジェクトのフィールドから直接アクセスできます。
Type columnNameType = row["columnName"].GetType();
そして、追加の代替手段として使用できます
sp_help 'Table_Name'
EDIT:また、sp_helpは任意のオブジェクトに使用できます(つまり、ストアドプロシージャの入力変数と出力変数の戻り値の型を示します)
一般に、既存のテーブルまたはビューの場合、システム カタログまたは を使用する必要がありますINFORMATION_SCHEMA.COLUMNS
が、それが任意のクエリである場合は、少し難しくなります。
sys.dm_exec_describe_first_result_set
動的管理ビューを使用します。多くの場合、クエリを単一引用符でエスケープしなければならないことが最大の問題です。
DECLARE @tsql nvarchar(max) = N'SELECT YourFields FROM YourQuery';
SELECT *
FROM sys.dm_exec_describe_first_result_set(@tsql, null, 0);
詳細については、ドキュメントを参照してください。
または、ストアド プロシージャを使用して、sp_describe_first_result_set
基本的に同じ結果を得ることができます。(動的管理ビューは、WHERE でのフィルター処理や ORDER BY での並べ替えがより簡単にできるので便利です。)
DECLARE @tsql nvarchar(max) = N'SELECT YourFields FROM YourQuery';
EXEC sp_describe_first_result_set @tsql, null, 0;
繰り返しますが、詳細についてはドキュメントを参照してください。
結果セットのメタデータは、テーブルのメタデータとは異なることに注意してください。SQL クエリには式を含めることができ、そのデータ型は、クエリを実行するテーブルのデータ型とは異なる場合があります。
多くの SQL クエリ インターフェイスは、結果セットのメタデータ (データ型など) に関する情報を取得するための関数を提供します。
使用する必要がある特定の API 関数は、使用している言語とクエリ インターフェイスによって異なります。あなたはこれを述べていません。
たとえば、ODBC を使用している場合、SQLDescribeCol()
関数は結果セットのメタデータに関する情報を提供できます。