ストアドプロシージャのすべての結果セットのメタデータを返すプロシージャはありますか?
いいえ、はい。
番号
最初の結果セット以上にアクセスする純粋なT-SQLの手段はありません。でもOPENROWSETとOPENQUERYは同じ制限があります。
クエリは複数の結果セットを返す可能性がありますが、OPEN(ROWSET | QUERY)は最初の結果セットのみを返します。
記録のために、私はこの制限の一般的な技術的理由があることを言ったり、示唆したりしていません。私は制限がに限定されていないことを指摘していますsp_describe_first_result_set
、sys.dm_exec_describe_first_result_set
とsys.dm_exec_describe_first_result_set_for_object
。
はい
情報(結果セットのメタデータ、さらには結果)を取得する唯一の方法は、結果セット2-nの場合、アプリケーションコードを使用することです。最初に使用して、クエリ/ストアドプロシージャ(複数可)を実行することになるSqlCommand.ExecuteReader(たCommandBehavior)を用いてのCommandBehaviorのKeyInfo
。その後、あなたは結果セットのメタデータを使用して取得することができSqlDataReader.GetSchemaTable方法を、および呼び出しSqlDataReader.NextResultの結果セットを循環する方法を。ただ、アプリのコードを経由してこれを行うことは、動的SQLおよび一時テーブルで作業していないの制限はありませんが、それがいることを心に留めておくん実際にSQLコードを実行し、DMLステートメントがあり、データを変更せずに結果セットのメタデータのみが必要な場合は、テストするSQLをBEGIN TRAN
/でラップする必要がありますROLLBACK TRAN
。
アプリケーションのタイプは、通常のWindowsアプリ、コンソールアプリ、Webアプリなどにすることができ、SQLCLR関数やストアドプロシージャにすることもできます。
SQLCLRを介してこれを行うことに関しては、ここで説明されていることを実行するストアドプロシージャが既に存在します。これはDB_DescribeResultSetsと呼ばれ、SQL#ライブラリの一部です(私はこのライブラリを作成しています。無料バージョンはありますが、DB_DescribeResultSetsはフルバージョンでのみ使用できます)。