문제

저장된 절차를 사용하여 데이터베이스에서 일부 쿼리를 실행하고 있습니다. 값은 쿼리 문자열에서 가져온 다음 저장 프로 시저로 전달됩니다. 문제는 사용자가 3 개 이상의 쿼리 문자열을 생성하는 1 개 이상의 옵션을 선택할 수 있다는 것입니다.

예를 들어 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
도움이 되었습니까?

해결책

저장 프로 시저에서 기본 매개 변수를 사용할 수 있습니다.

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))

다른 팁

저장된 Proc의 매개 변수에 기본값을 넣으면 1, 2 또는 3 값으로 호출 할 수 있습니다.

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

각 값이 int입니까? 아니면 각각 다를까요?

귀하의 옵션 :

  1. 클라이언트의 과부하를 처리하고 저장된 Proc에 전화하십시오.
  2. 선택적 매개 변수를 사용합니다 (예 : 하나의 int, 하나의 플로트, 하나의 varchar 또는 기본값)
  3. 다른 저장 Procs를 사용하십시오

관련이있는 경우 클라이언트 코드에서 데이터 유형 우선 순위 및 유형 변환을 처리하려면 1 번 제안합니다. 그렇지 않으면 선택적 매개 변수/기본값 동일한 데이터 유형 인 경우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top