Pregunta

Estoy usando un procedimiento almacenado para ejecutar algunas consultas en mi base de datos. El valor se toma de una cadena de consulta y luego se pasa al procedimiento almacenado. La cuestión es que el usuario puede seleccionar más de 1 opción que genera 3 o más cadenas de consulta.

p. http://localhost.com/test.aspx?param=76&param2=79

Sé cómo tomar los valores de la consulta, pero hago que el procedimiento almacenado acepte 1 o 2 o 3 valores como una sobrecarga

por ejemplo

   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 es una copia del procedimiento almacenado ..

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
¿Fue útil?

Solución

Puede usar parámetros predeterminados en su procedimiento almacenado:

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

por supuesto, tendrá que manejar esos valores en su cláusula where:

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

Otros consejos

puede poner valores predeterminados en los parámetros para su proceso almacenado, luego puede llamarlo con 1, 2 o 3 valores.

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

¿Cada valor será int? ¿O cada uno será diferente?

Sus opciones:

  1. Lidiar con la sobrecarga en el cliente y llamar a un proceso almacenado
  2. Utilice parámetros opcionales (por ejemplo, un int, un flotante, un varchar O valores predeterminados)
  3. Usar diferentes procesos almacenados

Sugeriría el número 1 para tratar la prioridad de tipo de datos y la conversión de tipos en el código del cliente, si es relevante. De lo contrario, parámetros opcionales / valores predeterminados si el mismo tipo de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top