دستور معادل cursor در sql
با سلام
من نیاز دارم که دستوری شبیه به کرسر بنویسم که به ازای هر رکوردی که واکشی میشه و توی یه جدول مجازی ریخته میشه یه سری داده دیگه هم از یکسری جدول دیگه واکشی بشه و توی جدول مجازی ریخته بشه و پشت سر هم بودن Master Detail اطلاعات لازمه
با cursor که می نویسم سرعت خیلی پایینه و اصلا نمیشه به عنوان یه کوئری برای وب استفاده کنم
سوالم اینه آیا دوستان می دونن چه روشی را جایگزین کنم
ممنون و متشکرم لطفا راهنمایی بفرمایید
نقل قول: دستور معادل cursor در sql
سلام
شما باید از منطق join ها و Union ها استفاده کنید.
اگر به صورت Set Based فکر کنید خیلی راحت میتونید مشکلتون رو حل کنید.
1 ضمیمه
نقل قول: دستور معادل cursor در sql
سلام
گرچه این تاپیک کمی قدیمی شده ولی چون خودم این مشکل رو داشتم گفتم یک مثال ساده رو با کد پست کنم
در تصویر زیر من 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 اضافه کنم