Question

J'utilise une procédure stockée pour exécuter des requêtes dans ma base de données. La valeur provient d'une chaîne de requête, puis transmise à la procédure stockée. En réalité, l’utilisateur peut sélectionner plus d’une option générant au moins trois chaînes de requête.

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

Je sais comment prendre les valeurs de la requête, mais je fais en sorte que la procédure stockée accepte 1 ou 2 ou 3 valeurs un peu comme la surcharge

par exemple

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


    }

il s'agit d'une copie de la procédure stockée ..

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
Était-ce utile?

La solution

Vous pouvez utiliser des paramètres par défaut dans votre procédure stockée:

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

bien sûr, vous devrez gérer ces valeurs dans votre clause where:

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

Autres conseils

vous pouvez définir des paramètres par défaut pour les paramètres de votre procédure stockée, puis vous pouvez l’appeler avec 1, 2 ou 3 valeurs.

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

Chaque valeur sera-t-elle int? Ou seront-ils différents?

Vos options:

  1. Traitez la surcharge du client et appelez un proc stocké
  2. Utiliser des paramètres facultatifs (par exemple, une valeur par défaut: un int, un float, un varchar OU )
  3. Utiliser différents procs stockés

Je suggérerais que le numéro 1 traite de la priorité des types de données et de la conversion dans le code client, s'il est pertinent. Sinon, les paramètres facultatifs / les valeurs par défaut si le même type de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top