سؤال

أنا أستخدم إجراءً مخزنًا لتشغيل بعض الاستعلامات في قاعدة البيانات الخاصة بي.يتم أخذ القيمة من سلسلة استعلام ثم تمريرها إلى الإجراء المخزن.الشيء هو أنه يمكن للمستخدم تحديد أكثر من خيار واحد يولد 3 سلاسل استعلام أو أكثر.

على سبيل المثال http://localhost.com/test.aspx?param=76&param2=79

أعرف كيفية أخذ القيم من الاستعلام ولكنني أجعل الإجراء المخزن يقبل إما قيمة واحدة أو قيمتين أو ثلاث قيم مثل التحميل الزائد

على سبيل المثال

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


    }

هذه نسخة من الإجراء المخزن ..

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
هل كانت مفيدة؟

المحلول

يمكنك استخدام المعلمات الافتراضية في الإجراء المخزن الخاص بك:

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

وبالطبع سيكون لديك للتعامل مع تلك القيم في البند الخاص بك حيث:

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

نصائح أخرى

ويمكنك وضع التخلف عن المعلمات لبروك المخزنة الخاص بك، فإنك يمكن أن نسميها ب 1 أو 2 أو 3 القيم.

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

هل ستكون كل قيمة int؟أم سيكون كل منهما مختلفا؟

خياراتك:

  1. تعامل مع التحميل الزائد لدى العميل واتصل بأحد الإجراءات المخزنة
  2. استخدم المعلمات الاختيارية (على سبيل المثال، int واحد، وfloat واحد، وvarchar أو قيم افتراضية)
  3. استخدم عمليات مخزنة مختلفة

أقترح رقم 1 للتعامل مع أسبقية نوع البيانات وتحويل النوع في كود العميل، إذا كان ذلك ذا صلة.خلاف ذلك، المعلمات الاختيارية/القيم الافتراضية إذا كان نفس نوع البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top