نمایش نتایج 1 تا 7 از 7

نام تاپیک: optional parameter

  1. #1
    کاربر دائمی آواتار hamzehsh
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    https://samanhis.ir
    سن
    42
    پست
    166

    optional parameter

    سلام
    برای پارامترهای optional که در sp ها تعریف میکنیم مقدار null میگذاریم.
    بعضی جاها لازم است که در اجرای sp این شرط ها در نظر گرفته نشود.
    نمیخواهم که چند تا پروسیجر تعریف کنم ولی
    توی شرط ها چطور میتونیم بگیم که اگر مقدار پارامتر ورودی Null نبود بیاد جستجو انجام بده؟ یا شرایط رو بر اساس وارد کردن پارامتر یا وارد نکردن اون تعریف کنیم؟
    آیا استفاده از این روش اصولی هست؟
    روش جایگزینی برای این روش وجود داره؟

  2. #2
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,023

    نقل قول: optional parameter

    با and or باید در where کنترل کنید

  3. #3
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: optional parameter

    نقل قول نوشته شده توسط hamzehsh مشاهده تاپیک
    سلام
    برای پارامترهای optional که در sp ها تعریف میکنیم مقدار null میگذاریم.
    بعضی جاها لازم است که در اجرای sp این شرط ها در نظر گرفته نشود.
    نمیخواهم که چند تا پروسیجر تعریف کنم ولی
    توی شرط ها چطور میتونیم بگیم که اگر مقدار پارامتر ورودی Null نبود بیاد جستجو انجام بده؟ یا شرایط رو بر اساس وارد کردن پارامتر یا وارد نکردن اون تعریف کنیم؟
    آیا استفاده از این روش اصولی هست؟
    روش جایگزینی برای این روش وجود داره؟
    سلام و روز خوش
    شما چند راه دارین که انتخابش بستگی به چیزهایی مثل میزان پیچیده بودن کد پروسیجر اصلی و همینجور پرفورمنس داره.

    یک راه ساده (که البته روی پرفورمنس اثر منفی داره) اینه که مستقیما در دستور بیارین:
    Procedure ProcName @P1 int=-1 , @P2 nvarchar(100)=''

    SELECT * FROM TableName
    WHERE (@P1 IS NULL OR Field1=@P1) AND (@P2 IS NULL OR Field2 LIKE @P2)

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: optional parameter

    یک راه دیگه این هست که از بلوک IF استفاده کنین و برای هر حالت یک بلوک بنویسین که البته مشکل پرفورمنس نداره ولی اگر کد پروسیجر پیچیده باشه در تغییرات بعدی باید حواستون به همه بلوک ها باشه:
    Procedure ProcName @P1 int=-1 , @P2 nvarchar(100)=''

    IF @P1 IS NULL AND @P2 IS NULL
    BEGIN
    SELECT * FROM TableName
    END


    IF @P1 IS NULL AND @P2 IS NOT NULL
    BEGIN
    SELECT * FROM TableName
    WHERE Field2 LIKE @P2
    END

  5. #5
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: optional parameter

    یک راه دیگه هم این هست که کد sql رو خودتون بسازین که بهش میگن dynamic sql.

    البته این هم نیاز به استفاده از بلوک IF داره ولی باز هم کدش خواناتر از روش قبلی هست.
    مثال برای این روش زیاد هست ، گوگل کنین.

  6. #6
    کاربر دائمی آواتار hamzehsh
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    https://samanhis.ir
    سن
    42
    پست
    166

    نقل قول: optional parameter

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    یک راه دیگه این هست که از بلوک IF استفاده کنین و برای هر حالت یک بلوک بنویسین که البته مشکل پرفورمنس نداره ولی اگر کد پروسیجر پیچیده باشه در تغییرات بعدی باید حواستون به همه بلوک ها باشه:
    Procedure ProcName @P1 int=-1 , @P2 nvarchar(100)=''

    IF @P1 IS NULL AND @P2 IS NULL
    BEGIN
    SELECT * FROM TableName
    END


    IF @P1 IS NULL AND @P2 IS NOT NULL
    BEGIN
    SELECT * FROM TableName
    WHERE Field2 LIKE @P2
    END

    سلام
    بله درسته ممنونم بزرگوار
    من از همین روش دارم استفاده میکنم ولی خیلی سخت میشه توسعه داد

  7. #7
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: optional parameter

    نقل قول نوشته شده توسط hamzehsh مشاهده تاپیک
    من از همین روش دارم استفاده میکنم ولی خیلی سخت میشه توسعه داد
    سلام و روز خوش
    روش dynamic sql بهتره، البته اونجا هم باید از بلوک if استفاده کنین ولی دیگه تو در تو نیستن و برای هر حالت یک if ساده دارین.

    بیرون sql هم میتونین دستور رو بسازین (VB.net یا #C یا ...) که خیلی راحتتر هم هست: یک لیست میسازین و بازای هر پارامتر غیر نول بخش متناظر در where رو به لیست اضافه میکنین و دست آخر همه آیتم های لیست رو با " AND " به هم join میکنین.

تاپیک های مشابه

  1. ایجاد متد به صورت optional parameter در WCF
    نوشته شده توسط b.zarinfard در بخش WCF , Web Services , .Net Remoting
    پاسخ: 0
    آخرین پست: دوشنبه 12 شهریور 1397, 12:31 عصر
  2. دریافت یا عدم دریافت پارامترهای optional از url
    نوشته شده توسط mf_007 در بخش ASP.NET MVC
    پاسخ: 1
    آخرین پست: چهارشنبه 06 مرداد 1395, 23:21 عصر
  3. سوال: خطا هنگام insert با Invalid parameter number: parameter was not defi
    نوشته شده توسط numberone1 در بخش PHP
    پاسخ: 4
    آخرین پست: پنج شنبه 11 دی 1393, 19:58 عصر
  4. The types of the parameter field and parameter field current values are not compatibl
    نوشته شده توسط m_zamani در بخش گزارش سازی با Crystal Report
    پاسخ: 1
    آخرین پست: سه شنبه 28 خرداد 1392, 09:39 صبح
  5. سوال: optional
    نوشته شده توسط ali-software در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: شنبه 27 تیر 1388, 21:22 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •