2011-07-01 4 views

答えて

3

アプリケーションから、最初に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のか、別名型を使用していないことを前提としています。

+0

+1 DBMSファイルにSPを追加すると、Visual Studioは結果セットを判断できるようです。私はこれがフードの下で何をするのだろうかと疑問に思う – Andomar

+0

確かにトレースすることができますが、SET FMTONLY ONを使うか、手動でテキストを解析すると思われます。プロシージャに複数の結果セットがある場合、Visual Studioは何を表示しますか? –

+0

ちょうどトレースされ、SET FMTONLYを使用します。 DBMLは最初の結果セットのみを表示しますが、より多くを取得できますが、結果セットを自分で定義する必要があります。 – Andomar

関連する問題

 関連する問題