質問

iストアドプロシージャを使用して、データベースでクエリを実行しています。値はクエリ文字列から取得され、ストアドプロシージャに渡されます。つまり、ユーザーは3つ以上のクエリ文字列を生成する複数のオプションを選択できます。

e.g。 http://localhost.com/test.aspx?param=76&param2=79

私はクエリから値を取得する方法を知っていますが、ストアドプロシージャがオーバーロードのような1または2または3の値を受け入れるようにします

e.g。

   setValue (int val)
    {
       this.value = val;
    }

    setValue (double val)
    {
       this.value = (int) val
    }

    setValue (string val)
    {
       try
       {
          this.value = Integer.parseInt(val)
       }
       catch (Exception e)
       {
         System.out.println(e.getMessage());
         return 0;
       }


    }

これはストアドプロシージャのコピーです。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getSealRecordID] (@TRANSFER_ID int)
    AS
-- Declare variables


SELECT DISTINCT "FGFSTRANSFERS"."CONSIDERATION", "FGFSTRANSFERS"."AMOUNT_TRANSFER", "FGFSTRANSFERS"."DATE", 
"FGFSTRANSFERS"."TRANSFER_ID", 
CURR = CASE "FGFSTransferDetails"."CURR"
    WHEN 'USD' THEN 'United States Dollars'
    WHEN 'JMD' THEN 'Jamaican Dollars'
    WHEN 'CAD' THEN 'Canadian Dollars'
    WHEN 'GBP' THEN 'POUNDS'
    WHEN 'EUR' THEN 'EUROS'
    END
,"FGFSCUSTOMERS"."CMF_NAME_1", "FGFSCUSTOMERS"."CMF_NAME_2" , "FGFSTransferDetails"."AMOUNT", 
Cons_Curr = CASE "FGFSTransferDetails"."CURR" -- As Cons_Curr, 
    WHEN 'USD' THEN 'United States Dollars'
    WHEN 'JMD' THEN 'Jamaican Dollars'
    WHEN 'CAD' THEN 'Canadian Dollars'
    WHEN 'GBP' THEN 'POUNDS'
    WHEN 'EUR' THEN 'EUROS'
    END

,"FGFSTransferDetails"."DESCRIPTION", "FGFSTransferDetails"."IMID"
 FROM   ("FGFSInvestment"."dbo"."FGFSTransferDetails" "FGFSTransferDetails" INNER JOIN "FGFSInvestment"."dbo"."FGFSTRANSFERS" "FGFSTRANSFERS" ON "FGFSTransferDetails"."TRANSFER_ID"="FGFSTRANSFERS"."TRANSFER_ID") INNER JOIN "FGFSInvestment"."dbo"."FGFSCUSTOMERS" "FGFSCUSTOMERS" ON "FGFSTRANSFERS"."CUSTODIAN"="FGFSCUSTOMERS"."CMF_ACCOUNT"
 WHERE  "FGFSTRANSFERS"."TRANSFER_ID"= @TRANSFER_ID  AND "FGFSTransferDetails"."TRANSFER_ID"=@TRANSFER_ID
役に立ちましたか?

解決

ストアドプロシージャでデフォルトパラメータを使用できます:

CREATE PROCEDURE [dbo].[getSealRecordID] 
(   @PARAM int = -1,
    @PARAM2 int = -1,
    @PARAM3 int = -1
)
    AS
...

もちろん、where句でこれらの値を処理する必要があります。

...
WHERE (@PARAM = -1 OR (condition with @PARAM))
  AND (@PARAM1 = -1 OR (condition with @PARAM1))
  AND (@PARAM2 = -1 OR (condition with @PARAM2))

他のヒント

ストアドプロシージャのパラメータにデフォルトを設定し、1、2、または3つの値で呼び出すことができます。

CREATE PROC MyProc
    (@Param1 int,
     @Param2 int = null,
     @Param3 int = null)
AS
-- body of proc here

各値はintになりますか?または、それぞれ異なりますか?

オプション:

  1. クライアントでオーバーロードを処理し、1つのストアドプロシージャを呼び出す
  2. オプションのパラメーター(たとえば、1つのint、1つのfloat、1つのvarchar OR デフォルト値)を使用します
  3. 異なるストアドプロシージャを使用する

関連する場合は、クライアントコードでデータ型の優先順位と型変換を処理するために1番をお勧めします。それ以外の場合、同じデータ型の場合はオプションのパラメーター/デフォルト値。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top