2009-06-24 3 views
1

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

http://localhost.com/test.aspx?param=76&param2=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"[email protected]_ID 

답변

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

안녕하세요, 고마워요. 방금 네가 내 목숨을 구했어, 고마워. 신의 축복이 – ferronrsmith

+0

입니다. 환영합니다. – fretje

2

저장 프로 시저의 매개 변수에 기본값을 넣을 수 있습니다. 그런 다음 1, 2 또는 3 값으로 호출 할 수 있습니다.

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

너무 감사합니다. – ferronrsmith

1

각 값은 int일까요? 아니면 각각 다를 것입니까?

귀하의 옵션 : 클라이언트에 과부하 시저 저장

  • 를 사용하여 선택적 매개 변수 (예를 들어 하나 개 INT, 하나의 플로트, 하나의 VARCHAR 또는 기본값)
  • 사용 하나를 호출와

    1. 거래 다른 저장된 procs

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

  • +0

    그냥 예일뿐입니다. 미안 해요. – ferronrsmith