Frage

Ich verwende eine gespeicherte Prozedur einige Abfragen in der Datenbank auszuführen. Der Wert wird aus einem Abfrage-String genommen dann auf die gespeicherte Prozedur übergeben. die Sache ist, kann der Benutzer mehr als 1 Option auswählen, die 3 oder mehr Abfrage-String generiert.

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

Ich weiß, wie die Werte aus der Abfrage zu nehmen, aber ich tue ich die gespeicherte Prozedur mache entweder 1 oder 2 oder 3 Werte akzeptiert irgendwie wie eine Überlastung

z.

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


    }

Dies ist eine Kopie der gespeicherten Prozedur ..

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
War es hilfreich?

Lösung

Sie können Standardparameter in Ihrer gespeicherten Prozedur verwenden:

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

Natürlich werden Sie diese Werte in Ihrer where-Klausel umgehen müssen:

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

Andere Tipps

Sie können Ihre gespeicherte Prozedur setzen Standardwerte auf die Parameter für, dann können Sie es mit 1 nennen, 2 oder 3 Werte.

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

Wird jeder Wert int sein? Oder wird jeder anders sein?

Ihre Optionen:

  1. Deal mit in der Client-Überlastung und rufen Sie eine gespeicherte Prozedur
  2. Verwenden Sie optionale Parameter (zB ein int, ein Schwimmer, ein varchar ODER Standardwerte)
  3. Verwenden Sie verschiedene gespeicherte Procs

Ich würde vorschlagen, die Nummer 1 mit Datentyp Vorrang und Typumwandlung in dem Client-Code zu tun, wenn es relevent ist. Ansonsten optionale Parameter / Standardwerte, wenn gleicher Datentyp.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top