الإجراء المخزن الذي يتعامل مع قيمة 1 أو 2 أو 3
-
22-07-2019 - |
سؤال
أنا أستخدم إجراءً مخزنًا لتشغيل بعض الاستعلامات في قاعدة البيانات الخاصة بي.يتم أخذ القيمة من سلسلة استعلام ثم تمريرها إلى الإجراء المخزن.الشيء هو أنه يمكن للمستخدم تحديد أكثر من خيار واحد يولد 3 سلاسل استعلام أو أكثر.
على سبيل المثال http://localhost.com/test.aspx?param=76¶m2=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؟أم سيكون كل منهما مختلفا؟
خياراتك:
- تعامل مع التحميل الزائد لدى العميل واتصل بأحد الإجراءات المخزنة
- استخدم المعلمات الاختيارية (على سبيل المثال، int واحد، وfloat واحد، وvarchar أو قيم افتراضية)
- استخدم عمليات مخزنة مختلفة
أقترح رقم 1 للتعامل مع أسبقية نوع البيانات وتحويل النوع في كود العميل، إذا كان ذلك ذا صلة.خلاف ذلك، المعلمات الاختيارية/القيم الافتراضية إذا كان نفس نوع البيانات.