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

نام تاپیک: store procedure

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    80

    Question store procedure

    سلام
    من یک store procedure برای گزارشم دارم که می خوام شرط store procedure به عنوان پارامتر از برنامه ارسال بشه. علت این کار اینه که یک گزارش ترکیبی دارم و تعداد شرطها بستگی به انتخاب کاربر داره.
    کسی نظری داره؟

  2. #2

    نقل قول: store procedure

    سلام

    می تونید از Dynamic TSQL استفاده کنید ... برای دستور exec جستجو نمایید ...
    آخرین ویرایش به وسیله baktash.n81@gmail.com : دوشنبه 19 تیر 1391 در 09:43 صبح

  3. #3
    کاربر دائمی آواتار Galawij
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    شاره که م سنه
    پست
    711

    نقل قول: store procedure

    سلام،
    شما می تونید داخل SP همه شرطها را لحاظ کنید ولی بسته به انتخاب کاربر شرطتتون عمل کنه.
    مثلا به همه پارامترهای ورودی مقدار اولیه صفر بدید بعد قسمت Where روال هم به این صورت درمیاد:
    WHERE ((@IdContract=0)OR(dbo.TbContract.IdContract=@IdCo ntract))
    And
    ((@UserId='00000000-0000-0000-0000-000000000000')OR(dbo.aspnet_Users.UserId=Convert(u niqueidentifier,@UserId)))

    این حالت خیلی انعطاف پذیره و کاربردی مخصوصا برای گزارشات برنامه.

  4. #4
    کاربر دائمی آواتار desatir7316
    تاریخ عضویت
    آذر 1388
    محل زندگی
    تهران
    پست
    1,211

    نقل قول: store procedure

    نقل قول نوشته شده توسط rezaeyan مشاهده تاپیک

    کسی نظری داره؟

    داینامیک سرعتتو میاره پایین
    اگه برات مهمه می تونی به این هم توجه کنی

  5. #5
    کاربر دائمی آواتار ali_kolahdoozan
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    اون سر دنیا
    پست
    1,631

    نقل قول: store procedure

    شما میتونی یک String را بفرستی داخل sp و بعد آنرا exec کنی . نگران performance نباش . اگر طراحی database صحیح باشه و بقیه قسمتها استاندارد باشد ، نوشتن یک query داینامیک فقط برای یک یا چند گزارش مشکلی ایجاد نمیکنه . باز هم اگر مشکلی بود لطفا concept را درست توضیح بدهید تا ببینیم بهترین انتخاب چی میتونه باشه .

    ضمننا کم کم نگاهی به Linqtosql و EF هم داشته باشید. (این به معنی حذف SP نیست . شما میتوانید از هسته linq یا ef استفاده کنید ولی همه پروژه خود را مبتنی بر sp بنویسید، در این صورت یک جاهایی مثل مورد الان دستورات داینامیک ef با lingtosql میتونه نجاتت بده ).

  6. #6
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    80

    نقل قول: store procedure

    نقل قول نوشته شده توسط ali_kolahdoozan مشاهده تاپیک
    شما میتونی یک String را بفرستی داخل sp و بعد آنرا exec کنی .
    در مورد این موضوع بیشتر توصیح میدین

  7. #7
    کاربر دائمی آواتار ali_kolahdoozan
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    اون سر دنیا
    پست
    1,631

    نقل قول: store procedure

    سلام

    ببین الان این چیزی که برات میزارم رو ببین . فقط کافی است string رو در سطح application بسازی و شوت کنی اینجا و خلاص

    Create Proc StringQuery
    @Strinput nvarchar(max)
    As
    EXEC sp_executesql @Strinput



    Declare @str nvarchar(max)
    set @str='Your Dynamic Query'
    Exec StringQuery @str

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

    نقل قول: store procedure

    سلام
    بخش کندی Dynamic SQL کجاست ؟

    نقل قول نوشته شده توسط desatir7316 مشاهده تاپیک
    داینامیک سرعتتو میاره پایین
    اگه برات مهمه می تونی به این هم توجه کنی

  9. #9
    کاربر دائمی آواتار ali_kolahdoozan
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    اون سر دنیا
    پست
    1,631

    نقل قول: store procedure

    نقل قول نوشته شده توسط ASKaffash مشاهده تاپیک
    سلام
    بخش کندی Dynamic SQL کجاست ؟
    لطفا واضحتر توضیح بفرمائید.

    پ ن : در اینکه بهتر است در یک پروژه از SP ها و البته اخیرا تکنولوژیهایی مثل Linq یا EF استفاده بشه شکی نیست ، اما گاهی دیگر امکان پذیر نیست و باید از Query های داینامیک استفاده بشه که ایرادی هم ایجاد نمیکنه . (شاید نظر شما این بوده).
    آخرین ویرایش به وسیله حمیدرضاصادقیان : شنبه 24 تیر 1391 در 16:41 عصر دلیل: لطفا رعایت بفرمائید

  10. #10
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    80

    نقل قول: store procedure

    Create Proc StringQuery
    @Strinput nvarchar(max)
    As
    EXEC sp_executesql @Strinput



    Declare @str nvarchar(max)
    set @str='Your Dynamic Query'
    Exec StringQuery @str
    بیشتر در باره این کدها توضیح میدین

  11. #11
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: store procedure

    سلام
    برادر خودت می پرس خودت هم نتیجه گیری می کنی واقعا عجیب است . جواب من شفاف است ادعا شده که Dynamic SQL کند است من هم پرسیدم که کجای عمل Dynamic SQL کند است ؟ چون مطمئن هستم ادعا اشتباه است شاید desatir7316 دلیلی داشته باشند که من نمی دانم.

  12. #12
    کاربر دائمی آواتار hamid-nic
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    اصفهان
    پست
    813

    نقل قول: store procedure

    من از Dynamic SQL در پروژه هام استفاده کردم و مشکلی باهاش نداشتم .
    اتفاقاً خیلی خوب جواب داد .

  13. #13

    نقل قول: store procedure

    سلام.
    Dynamic SQL نسبت به Static Query کندتر میشه دلیلش هم اینه که هر دفعه SQL Server مجبور میشه یک Plan برای اون ایجاد کنه که همین Plan باعث کندی اون خواهد شد. البته نه اینقدر محسوس که کاربر احساس کنه! به همین خاطر پیشنهاد میشه حتی المقدور در SP ها از Query های ثابت به جای Dynamic استفاده بشه. دومین مورد در مورد استفاده از Dynamic Query ها این هست که باید به مسائل امنیتی دقت کافی رو بکنید تا کدتون مستعد SQL Injection نباشه.به همین خاطر باید اونها رو از سمت Client به سمت Server و درون Sp ها جای داده و از Parameter ها استفاده کرد که بازم باید دقت کرد و مسائلی رو رعایت کرد.
    خیلی از راهکارها اگر دقیقتر بررسی بشه میتوان بدون استفاده از Dynamic Query مشکل رو حل کرد.

  14. #14
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: store procedure

    سلام
    زمان کامپایل شدن یک Dynamic SQL در عمل زیر یک ثانیه است که اصلا معنی کندی نخواهد داد با فرض رعایت اصول امنیتی که بسیار مهم است مواردی استفاده از Dynamic SQL برای بالابردن سرعت و کارائی یک اجبار است اگر ابهامی باشد حاضرم سر موقع یک مثال بزنم (وقتی که می خواهیم شرایط پویا ایجاد کنیم و قرار است دستور Select در سمت DB باشد)

  15. #15

    نقل قول: store procedure

    ممنون جناب کفاش. اگر با مثال بیان کنید خیلی عالی میشه.منم سعی میکنم در زمینه Compile شدن و بحثهای دیگه مواردی رو مطرح کنم تا دوستان با این موارد با جزئیات آَشنا بشن.

  16. #16

    نقل قول: store procedure

    سلام
    من هم یک تاپیک گذاشتم البته اول این تاپیک رو ندیدم

    لینک

    من دیدم که میشه Where رو داینامیک کرد
    اینطوری دیگه نیازی هم به ترجمه نداره سرور

    فقط بحث این میمونه که چطوری پارامتر هارو بررسی کنیم و به where بچسبونبم

    تاپیک منوهم یک نگگاه بندازید
    ممنون میشم

  17. #17
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: store procedure

    سلام
    خوب من برای شروع از یک جدول کالاها بنام Goods شروع میکنم برای موضوع امنیت که بعدا بحث میکنیم عمدا فیلد کد کالا را کاراکتری میگیرم بنام C_Goods و طبقه کالا را یک int بنام GTID می گیرم حال منطق ذیل را برای دریافت فیلدهای متغیر و شرایط متغییر اینطوری می نویسم دوستان مطالعه کنند تا بحث فنی را شروع کنیم : (حتما به حالتهای متفاوت دقت کنید)


    --Declare @C_Goods1 VarChar(16)='1250000000000000',@C_Goods2 VarChar(16)='1260000000000000',@GTID int=11251121
    --Declare @C_Goods1 VarChar(16)='1250000000000000',@C_Goods2 VarChar(16)=null,@GTID int=11251121
    --Declare @C_Goods1 VarChar(16)=null,@C_Goods2 VarChar(16)='1260000000000000',@GTID int=11251121
    --Declare @C_Goods1 VarChar(16)=null,@C_Goods2 VarChar(16)=null,@GTID int=11251121
    --Declare @C_Goods1 VarChar(16)=null,@C_Goods2 VarChar(16)=null,@GTID int=null
    Declare @C_Goods1 VarChar(16)='1250000000000000',@C_Goods2 VarChar(16)='1260000000000000',@GTID int=null
    Declare @FieldList VarChar(4000)='*,Col1=GTID*2,Col2=Len(C_Goods)'
    Declare @DSQL VarChar(1000)='',@DWhere VarChar(3000)=''
    Set @DSQL+=' Select '+@FieldList+' From Goods'
    if @C_Goods1 IsNull
    Begin
    if Not @C_Goods2 IsNull
    Set @DWhere='C_Goods<='''+@C_Goods2+Char(39)
    End
    Else
    Begin
    if Not @C_Goods2 IsNull
    Set @DWhere='C_Goods Between '''+@C_Goods1+''' and '''+@C_Goods2+Char(39)
    else
    Set @DWhere='C_Goods>='''+@C_Goods1+Char(39)
    End
    if
    Not @GTID IsNull
    Set @DWhere+=(Case @DWhere When''Then''Else' and 'End)+'GTID='+Convert(VarChar(10),@GTID)
    if @DWhere<>''
    Set @DSQL+=' Where '+@DWhere
    Select @DSQL --Show
    ExEc(@DSQL)--Run

    برای مواردی که متن خوب مشاهده نشود تصویر سورس را هم قرار میدهم :
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله ASKaffash : دوشنبه 26 تیر 1391 در 07:55 صبح

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

  1. سوال در مورد Extended Stored Procedure
    نوشته شده توسط محسن در بخش SQL Server
    پاسخ: 12
    آخرین پست: چهارشنبه 26 اسفند 1383, 01:23 صبح
  2. stored procedure
    نوشته شده توسط bebakhshid در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: دوشنبه 02 شهریور 1383, 17:29 عصر
  3. چگونگی اعمال Stored Procedures های SQL در برنامه
    نوشته شده توسط کم حوصله در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: پنج شنبه 29 مرداد 1383, 19:49 عصر
  4. extended stored procedures و ارسال پیام در شبکه
    نوشته شده توسط Mahdavi در بخش SQL Server
    پاسخ: 6
    آخرین پست: سه شنبه 09 تیر 1383, 21:56 عصر
  5. Stored Procedure in asp.net
    نوشته شده توسط FirstLine در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: دوشنبه 18 اسفند 1382, 10:12 صبح

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

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