Pergunta

Eu estou usando um procedimento armazenado para executar algumas consultas no meu banco de dados. O valor é obtido a partir de uma string de consulta, em seguida, passado para o procedimento armazenado. a coisa é, o usuário pode selecionar mais de 1 opção que gera 3 ou mais string de consulta.

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

i sabe como tirar os valores a partir da consulta, mas eu posso fazer o procedimento armazenado aceita 1 ou 2 ou 3 valores um bocado como a sobrecarga

por exemplo.

   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;
       }


    }

Esta é uma cópia do procedimento armazenado ..

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
Foi útil?

Solução

Você pode usar os parâmetros padrão em seu procedimento armazenado:

CREATE PROCEDURE [dbo].[getSealRecordID] 
(   @PARAM int = -1,
    @PARAM2 int = -1,
    @PARAM3 int = -1
)
    AS
...

é claro que você vai ter que lidar com esses valores na sua cláusula where:

...
WHERE (@PARAM = -1 OR (condition with @PARAM))
  AND (@PARAM1 = -1 OR (condition with @PARAM1))
  AND (@PARAM2 = -1 OR (condition with @PARAM2))

Outras dicas

você pode colocar as inadimplências sobre os parâmetros para o seu proc armazenado, então você pode chamá-lo com 1, 2 ou 3 valores.

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

Será que cada valor ser int? Ou será cada diferente?

Suas opções:

  1. Lidar com a sobrecarga no cliente e chamar uma proc armazenados
  2. Usar parâmetros opcionais (por exemplo, um int, uma bóia, um varchar ou valores padrão)
  3. Use diferentes armazenados procs

Eu sugiro número 1 para lidar com tipo de dados precedência e tipo de conversão no código do cliente, se é relevent. parâmetros Caso contrário opcionais / valores padrão se mesmo tipo de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top