0
は、私は、SQL Serverを使用する設定します。どうしたらいいですか? INFORMATION_SCHEMAのようなものが役に立ちます。メタデータは、2008年</p> <p>私は<strong>列名</strong>と<strong>データ型ストアドプロシージャの結果セットの</strong>を取得したい
は、私は、SQL Serverを使用する設定します。どうしたらいいですか? INFORMATION_SCHEMAのようなものが役に立ちます。メタデータは、2008年</p> <p>私は<strong>列名</strong>と<strong>データ型ストアドプロシージャの結果セットの</strong>を取得したい
アプリケーションから、最初にSET FMTONLY ONを発行して、潜在的な結果セットを調べることができます。しかし、これは、SQL Serverの将来のバージョンでは、はるかに堅牢なメタデータ検出メカニズムを使用して段階的に廃止されています。その間に、ループバックサーバーに対してOPENQUERYを使用することで、おそらく最高になるでしょう。これは、ストアドプロシージャが正確に1つの結果セットを返すことを前提としています。複数の結果セットがある場合は、それほど機能しません。例えば
:
EXEC master.dbo.sp_addlinkedserver
@server = 'LOOPBACK_SERVER',
@srvproduct = '',
@provider = 'SQLOLEDB',
@datasrc = @@SERVERNAME;
SELECT * INTO #foo
FROM OPENQUERY(LOOPBACK_SERVER, 'EXEC db_name.dbo.proc_name');
SELECT c.name, t.name, t.max_length, t.precision, t.scale
FROM tempdb.sys.columns AS c
INNER JOIN sys.types AS t
ON c.system_type_id = t.system_type_id
WHERE c.[object_id] = OBJECT_ID('tempdb..#foo');
DROP TABLE #foo;
注これはまた、任意のCLRのUDTのか、別名型を使用していないことを前提としています。
+1 DBMSファイルにSPを追加すると、Visual Studioは結果セットを判断できるようです。私はこれがフードの下で何をするのだろうかと疑問に思う – Andomar
確かにトレースすることができますが、SET FMTONLY ONを使うか、手動でテキストを解析すると思われます。プロシージャに複数の結果セットがある場合、Visual Studioは何を表示しますか? –
ちょうどトレースされ、SET FMTONLYを使用します。 DBMLは最初の結果セットのみを表示しますが、より多くを取得できますが、結果セットを自分で定義する必要があります。 – Andomar