PDA

View Full Version : شبیه سازی کرسر با دستورات دیگر در sql server



mohammadyaser
دوشنبه 08 خرداد 1391, 13:44 عصر
با سلام من برای کار با دیتا بیسم از کرسر استفاده می کردم البته بعضی مواقع شرایطی پیش می امد که چند تا کرسر تو در تو تعریف می کردم که این ا صلا بهینه نیست .برای رفع این مشکل از از حلقه های while استفاده کردم . می خواستم بدونم روشی که استفاده کردم بهتر از کرسر است یا نه و ایا روشهای دیگری هم وجود دارد یا نه؟
اینم کدمSelect TOP 1 @Curr_Shift=ASH0101,@Shift_Unic=ASH0904,@Curr_Day= AIO0201,@Curr_radif=AIO0101,@_Day=AIO0201,@Out_Day =AIO0202,@_Year=AMN0101,@_Mon=AMN0102,@IN_Per=dbo. Time2Val(AIO0501,AIO0502),@Out_Per=dbo.Time2Val(AI O0503,AIO0504),@INDEX=AIO0901 from InOut Where APR0901=@Curr_Per and amn0101=@year and amn0102=@mon Order By AIO0201

WHILE @INDEX is not null
Begin--begin 1
دستورات داخل حلقه

Select TOP 1 @Curr_Shift=ASH0101,@Shift_Unic=ASH0904,@Curr_Day= AIO0201,@Curr_radif=AIO0101,@_Day=AIO0201,@Out_Day =AIO0202,@_Radif=AIO0101,@_Year=AMN0101,@_Mon=AMN0 102,@IN_Per=dbo.Time2Val(AIO0501,AIO0502),@Out_Per =dbo.Time2Val(AIO0503,AIO0504),@INDEX=AIO0901 from InOut Where APR0901=@Curr_Per and amn0101=@year and amn0102=@mon AND @INDEX<AIO0901 Order By AIO0201

end --end 1

Reza_Yarahmadi
دوشنبه 08 خرداد 1391, 20:22 عصر
بستگی به کاری که میخواید انجام بدید داره ، بعضی مواقع میتونید دستوزات رو در قالب یه تابع بیارید و توی یک Select تابع رو صدا بزنید. بعضی مواقع با ترفندهای Join بعضی مواقع CTE و ... (به ندرت هم پیش میاد که دیگه راه حلی غیر از کرسر وجود نداره) خلاصه اینکه باید اول نوع مسئله معبوم بشه بعد در مورد راه حلها صحبت کرد.

یوسف زالی
سه شنبه 09 خرداد 1391, 00:54 صبح
سلام.
در بدترین حالت while جواب می ده و نیازی به کرسر نیست.

baktash.n81@gmail.com
چهارشنبه 10 خرداد 1391, 09:19 صبح
سلام

البته همچین هم با خیال راحت نمی تونی بگی While نوشتم خیالم راحت باشه ... باید صورت سئوال رو کامل مطرح کنی ... در هر صورت خیلی خیلی مهمه که تو کد نویسی SQL از حلقه استفاده نکنی ... می تونی اطلاعات رو لود کنی و تو لایه APP کاری رو که می خوای انجام بدی و نتیجه رو یه دفعه به SQL بر گردونی ...