ورود

View Full Version : دستور معادل cursor در sql



آرام جان گل
شنبه 09 بهمن 1395, 16:40 عصر
با سلام
من نیاز دارم که دستوری شبیه به کرسر بنویسم که به ازای هر رکوردی که واکشی میشه و توی یه جدول مجازی ریخته میشه یه سری داده دیگه هم از یکسری جدول دیگه واکشی بشه و توی جدول مجازی ریخته بشه و پشت سر هم بودن Master Detail اطلاعات لازمه
با cursor که می نویسم سرعت خیلی پایینه و اصلا نمیشه به عنوان یه کوئری برای وب استفاده کنم
سوالم اینه آیا دوستان می دونن چه روشی را جایگزین کنم

ممنون و متشکرم لطفا راهنمایی بفرمایید

حمیدرضاصادقیان
دوشنبه 18 بهمن 1395, 19:53 عصر
سلام
شما باید از منطق join ها و Union ها استفاده کنید.
اگر به صورت Set Based فکر کنید خیلی راحت میتونید مشکلتون رو حل کنید.

mmbguide
یک شنبه 13 مرداد 1398, 12:36 عصر
سلام

گرچه این تاپیک کمی قدیمی شده ولی چون خودم این مشکل رو داشتم گفتم یک مثال ساده رو با کد پست کنم

در تصویر زیر من 3 تا جدول دارم. از سمت چپ چدول tbl1 گروه بندی اصلی و جدول tbl2 گروه بندی فرعی هستش که به ازاء هر گروه اصلی باید تمام گروه های فرعی در جدول tbl3 بدون تکرار ثبت بشه:

150562

برای انجام اینکار در ابتدا Cursor استفاده کردم ولی در انتها به کدهای زیر تغییر دادم


INSERT INTO dbo.tbl3
( fldCategoryID ,
fldSubCategoryID
)

( SELECT T1.fldID ,
T2.fldID

FROM tbl1 AS T1
CROSS APPLY ( SELECT *
FROM tbl2
WHERE fldID NOT IN ( SELECT fldSubCategoryID
FROM tbl3
WHERE fldCategoryID = T1.fldID)
) AS T2
);


جدول tbl1 , tbl2 هیچگونه Relationی ندارند.

حالا هر بار که ردیف جدیدی به جدول tbl1 و یا جدول tbl2 اضافه می شه کافیه که کدهای بالا را اجرا کنم و تمام آیتم های جدید رو در جدول tbl3 اضافه کنم