2009-06-24 3 views
1

J'utilise une procédure stockée pour exécuter certaines requêtes dans ma base de données. La valeur est tirée d'une chaîne de requête puis transmise à la procédure stockée. La chose est, l'utilisateur peut sélectionner plus de 1 option qui génère 3 ou plus chaîne de requête.Procédure stockée qui gère 1 ou 2 ou 3 valeur

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

je sais comment prendre les valeurs de la requête, mais je dois-je faire la procédure stockée accepte soit 1 ou 2 ou 3 valeurs un peu comme une 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; 
     } 


    } 

ceci est 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"[email protected]_ID 

Répondre

3

Vous pouvez utiliser les 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 aurez à gérer les 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)) 
+0

hey merci l'homme, essayé ceci et cela a fonctionné! Tu viens de me sauver la vie, merci. Dieu vous bénisse – ferronrsmith

+0

vous êtes les bienvenus :) – fretje

2

vous pouvez mettre les paramètres par défaut sur les paramètres de votre proc stocké, alors 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 
+0

merci vous aussi l'homme – ferronrsmith

1

Est-ce que chaque valeur sera int? Ou chacun sera différent?

Vos options:

  1. Traiter la surcharge dans le client et appeler un proc stocké
  2. Utilisez les paramètres facultatifs (par exemple un int, un flotteur, un varchar OU valeurs par défaut)
  3. Utilisation processus stockés différents

Je suggérerais le numéro 1 pour traiter la priorité des types de données et la conversion de type dans le code client, si c'est pertinent . Sinon paramètres optionnels/valeurs par défaut si même type de données.

+0

c'était juste un exemple, je suppose que je vous jette désolé – ferronrsmith

Questions connexes