2009-06-24 37 views
1

存儲過程我使用的是存儲過程運行在我的數據庫一些查詢。該值取自查詢字符串,然後傳遞給存儲過程。事情是,用戶可以選擇多於一個選項來生成3個或更多的查詢字符串。,處理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 2009-06-24 20:22:01

+0

歡迎您:) – fretje 2009-06-24 20:24:33

2

您可以將默認值放在存儲過程的參數中,然後您可以用1,2或3的值調用它。

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

感謝你太男人 – ferronrsmith 2009-06-24 20:29:14

1

每個值都是int嗎?或者每個人都會有所不同?

您的選擇:

  1. 應對客戶超載,並調用一個存儲過程
  2. 使用可選參數(例如,一個INT,一個浮子,一個VARCHAR OR默認值)
  3. 使用不同的存儲過程

我建議編號1來處理客戶端代碼中的數據類型優先級和類型轉換,如果它是相關的。否則可選參數/默認值,如果相同的數據類型。