View Full Version : راهنمایی در مورد cursor
mjShojaei
جمعه 20 خرداد 1390, 21:38 عصر
با سلام
قبل از گفتن سوالم بگم با وجود اینکه عجله داشتم . جستجو کردم ولی چیزی که کار منو راه بندازه پیدا نکردم.
من می خوام برای پر کردن یک جدول از روی داده های جداول دیگر یک cursor بنویسم. حالا مشکل اینه که اصلا بلد نیستم cursor بنوبسم.
حالا اگه کسی می تونه کمکم کنه . لطفا کامل توضیح بده
با تشکر
یوسف زالی
شنبه 21 خرداد 1390, 00:53 صبح
سلام.تعریف کلی دستور برای استفاده های معمولی:
declare @ID int
declare @Data varchar(20)
declare #Cur Cursor for/*tafire cursor baraye yek select ke select mitune harjuri bashe*/
select top 10 F1, F2
from Tbl
where F3 > 100
order by 1
open #Cur /*baz kardane cursor, ba in kar data amade mishe*/
fetch next from #Cur into @ID, @Data /*makeshe avvalin data va rikhtane natije dar @ID va @Data*/
while @@FETCH_STATUS<>-1 /*ta vaghti be akhare select nareside*/
begin
-- Do SomeThing
print @Data
fetch next from #Cur into @ID, @Data
end
close #Cur /*bastane cursor*/
deallocate #Cur /*az beyn bordane cursor*/
mjShojaei
شنبه 21 خرداد 1390, 09:54 صبح
با سلام
اگه بخوام یک cursor بسازم باید کجا بنویسمش. داخل یک Srtored Procedures بنویسم یا نه جای دیگه
یوسف زالی
شنبه 21 خرداد 1390, 09:59 صبح
هر جایی البته در Script می تونی بنویسی
بستگی به کارت داره
SP, Function ..
mjShojaei
شنبه 21 خرداد 1390, 14:44 عصر
خیلی ممنون
من 4 جدول دارم که می خوام جدول چهار با استفاده از سه جدول دیگه پر بشه.
مثلا
می خوام جدول کارنامه رو از روی جدول دانش آموز و درس و کلاس پر کنم.
مسلما هر دانش آموز با کد خاص یک کلاس و چند درس مربوط به همان کلاس را دارد.
حالا برای این موضوع چه جوری cursor بنویسم.
یوسف زالی
شنبه 21 خرداد 1390, 15:06 عصر
این کار نیازی به کرسر نداره و با insert در میاد.
من جداول رو ندارم اما می تونی با insert , select درستش کنی
mjShojaei
یک شنبه 22 خرداد 1390, 11:18 صبح
آره منم همین فکر رو داشتم. ولی با رویه Select فقط میشه انگار یک رکورد یک رکورد عملیات انجام داد ولی با cursor میشه بین رکورد ها حرکت کرد.
چون قراره هر دانش آموز چند درس از جدول درس رو بگیره و اونا رو داخل جدول کارنامه ذخیره کنه.
به نظر شما از کدوم یک از این دو روش استفاده کنم.
ار اینکه با من همراهی می کنید ممنون
یوسف زالی
یک شنبه 22 خرداد 1390, 11:45 صبح
تو select insert میشه چندین ردیف ذخیره کرد.
mjShojaei
یک شنبه 22 خرداد 1390, 22:56 عصر
یعنی از for استفاده کنم یا نه. چجوری؟
یوسف زالی
یک شنبه 22 خرداد 1390, 23:34 عصر
نه.
تو sql فقط یه دستور insert select کافیه.
اگر جداول رو بگذاری راحت تر میشه نظر داد
mjShojaei
دوشنبه 23 خرداد 1390, 11:23 صبح
سلام
الان نمونه نذلرم که بگذارم. اگه شما نمونه ای دارید ممنون میشم راهنمایم کنید.
طرح این بحث برای مثال بود تا بتونم این کار رو تمرین کنم. اگه ممکنه با همون مثال مدرسه راهنماییم کنید.
در ÷ست هاتی قبل برای این مثال چند جدول فرضی گفتم.
با تشکر
یوسف زالی
دوشنبه 23 خرداد 1390, 12:51 عصر
بستگی کاملا مستقیم به نحوه ارتباط جداولتون داره.
ممکنه این طور بشه:
insert into Karname
select IDDaneshAmuz, IDDars, NomreDars, Date, ..from DaneshAmuz
join Dars on ...
اما تکلیف نمره مشخص نمیشه.چون باید در جدولی قبلا قرار داده شده باشه.در غیر اینصورت تک تک به ازای هر نمره یک insert خواهیم داشت.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.