1

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

http://localhost.com/test.aspx?param=76¶m2=79

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

例えば

   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
4

3 に答える 3

3

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

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))
于 2009-06-24T20:01:46.910 に答える
2

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

CREATE PROC MyProc
    (@Param1 int,
     @Param2 int = null,
     @Param3 int = null)
AS
-- body of proc here
于 2009-06-24T20:02:08.423 に答える
1

各値は int になりますか? それともそれぞれ違うのでしょうか?

オプション:

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

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

于 2009-06-24T20:04:08.027 に答える