3

これはメタ質問です。INFORMATION_SCHEMA各データベースに付属しているものを使用して、ストアドプロシージャの戻り値をどのように検出しますか?関数を使用すると、戻り値は明示的に宣言され、INFORMATION_SCHEMA下に表示されROUTINESます。

ただし、ストアドプロシージャは、奇妙な灰色の領域のように見えます(SPと関数の違いはいつものことです)。公式には「戻り値」がないようですが、最後に次のようなSELECTステートメントを実行できます。

SELECT RowID = @RowID;

例えば; C#では、「RowID」列から戻り値を読み取ります。これにより、関数のようにT-SQLコードのコンテキスト内ではありませんが、ストアドプロシージャが実際に値を返すことができることが明確になります。

定義自体を解析せずに、これらの値とそのタイプをどのように発見するのでしょうか。

編集

これを検索する場合、ストアドプロシージャの戻り値は暗黙的に整数ですが、結果セットと呼ばれるデータを返すこともできます。

4

1 に答える 1

7

ストアドプロシージャは整数を返します。

結果セットが返されるようにしたい場合は、SQL Serverにストアドプロシージャを解析して、この情報を提供するように依頼できます。

SQL Server 2012ではsys.dm_exec_describe_first_result_set_for_object、を置き換えるものが導入されていますSET FMTONLY

CREATE PROC TestProc2
AS
SELECT object_id, name FROM sys.objects ;
SELECT name, schema_id, create_date FROM sys.objects ;
GO

SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 0) ;
SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('TestProc2'), 1) ;
GO

ストアドプロシージャのパラメータを調べて、それらのいずれかにマークが付いているかどうかを確認することもできますOUTINFORMATION_SCHEMA.PARAMETERS各パラメータのモードを提供します。

3つすべてを組み合わせて見ると、必要なものがたくさん得られるはずです。

于 2013-03-08T22:28:03.743 に答える