Хранимая процедура, которая обрабатывает 1, 2 или 3 значения - PullRequest
1 голос
/ 24 июня 2009

Я использую хранимую процедуру для запуска некоторых запросов в моей базе данных. Значение берется из строки запроса, а затем передается в хранимую процедуру. Дело в том, что пользователь может выбрать более 1 опции, которая генерирует 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"=@TRANSFER_ID

Ответы [ 3 ]

3 голосов
/ 25 июня 2009

Вы можете использовать параметры по умолчанию в вашей хранимой процедуре:

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))
2 голосов
/ 25 июня 2009

вы можете установить значения по умолчанию для параметров вашего сохраненного процесса, затем вы можете вызвать его с 1, 2 или 3 значениями.

CREATE PROC MyProc
    (@Param1 int,
     @Param2 int = null,
     @Param3 int = null)
AS
-- body of proc here
1 голос
/ 25 июня 2009

Будет ли каждое значение int? Или все будут разные?

Ваши варианты:

  1. справиться с перегрузкой в ​​клиенте и вызвать один сохраненный процесс
  2. Использовать необязательные параметры (например, один int, один float, один varchar OR значения по умолчанию)
  3. Использовать разные хранимые процы

Я бы предложил номер 1 иметь дело с приоритетом типов данных и преобразованием типов в клиентском коде, если он уместен. В противном случае необязательные параметры / значения по умолчанию, если тип данных тот же.

...