1

1つの入力引数を取り、オプションの出力パラメーターを介して関連する属性を返すことができるストアドプロシージャを作成しています。これは次のように定義されます。

CREATE PROCEDURE dbo.sp_get_info
                       @Identifier  nvarchar(50),
                       @Info1       uniqueidentifier = NULL  OUTPUT,
                       @Info2       nvarchar(10) = NULL      OUTPUT,
                       @Info3       int = NULL               OUTPUT

プロシージャを次のように呼び出したいと思います。

DECLARE @uid uniqueidentifier
...
EXEC sp_get_info @Idenfier = 'a123', 
                 @Info1 = @uid

各出力値を取得すると、異なるアクティビティが発生します。@Info1このようにして、出力値のみを他の場所から取得する必要があるという事実を検出したいと思います。このように、プロシージャは、他の出力(現在は不要な)引数を取得するコストのかかるコードを実行する必要はありません。

まず、のようなテストを考えていましIF @Info1 IS NOT NULL do_somethingた。ただし、OUTPUTも言うように、引数は入力値(Microsoft SQL)も@uid持つことができ、それ自体が値を持つことができますNULL。このように、上記のテストは機能しません。

状況を解決するために使用される技術はありますか?

ありがとう、ペトル

4

2 に答える 2

1

@fieldand@valueパラメータを使用できます。である@field可能性がありますInfo1, Info2, Info3。これで@value可能になりnull、検索するフィールドがわかります。

CREATE PROCEDURE dbo.sp_get_info
    @Identifier nvarchar(50),
    @field nvarchar(50),
    @value nvarchar(50) output

呼び出し元のコードは、@valuefromnvarchar(50)を必要なタイプに変換する必要がありますが、通常は簡単です。

于 2012-09-08T11:08:20.433 に答える
1

デフォルト値は有効な入力であるため、明示的に渡されたかどうかはわかりません。@Use_Info1 BITたとえば、パラメータを使用するか無視するかを示すために、別のパラメータを追加できます。

于 2012-09-08T11:09:27.220 に答える