0

次のような出力パラメーターを持つ SP があります ALTER PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as

vb.net からそのプロシージャを呼び出して、計算の値を取得します。私の問題は次のとおりです。次の構造を持つ8つのSPがあります。

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...
CREATE TABLE @TempTable
Begin
Select ...
End
SET @VarName = Result

ただし、TempTable は常に同じです。いいえ、1 つのストアド プロシージャだけで 8 つの値すべてを取得する方法を探しています。私の考え:

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...
CREATE TABLE @TempTable
---Get first value
Begin
Select ...
End
SET @VarName1 = Result
---Get second value
Begin
Select ...
End
SET @VarName2 = Result
...

行を書き直すにはどうすればよいですか:ALTER PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT配列を操作することもできますか?

4

1 に答える 1

1

すべてのクエリで単一のストアド プロシージャを使用できます。以下は、8 つのフィールドを含む単一行の結果セットを返し、特定のフィールド名またはインデックスを使用してコードからそれらを取得できます。

CREATE PROCEDURE [dbo].[SP_Name] 
  @VarName decimal(18,2) 
AS

BEGIN
    DECLARE @VarName1 Datatype, @VarName2 Datatype, ...@VarName8 Datatype

    SELECT @VarName1 = yourCol
    FROM --First query

    SELECT @VarName2 = yourCol
    FROM --Second query
    ...

    SELECT @VarName8 = yourCol
    FROM --Eighth query

    --Finally Select all the variables
    SELECT @VarName1 Col1, @VarName2 Col2, ...,@VarName8 Col8
END

または、8 つのクエリすべての結果を返したい場合も可能です。単一のストアド プロシージャで選択クエリを実行し、コードから取得するだけで、ゼロ ベースのインデックス (例)DATASETを使用して個々のテーブルにアクセスできます。DataTable1 = YourDataSet.Tables[0]

于 2013-10-14T08:10:38.140 に答える