ورود

View Full Version : سوال: پیاده سازی Cursor با استفاده از روشهای Set_Based



NewLife2008
دوشنبه 30 فروردین 1389, 21:40 عصر
سلام
تا اونجایی که مطالعه کردم و متوجه شدم ، اساتید محترم فرمودند که استفاده از کرسر هزینه بر هستش. اما هنگامی که مجبوریم رکوردهای یک تیبل رو پیمایش کنیم و با توجه به فیلد خاص از هر رکورد عملی رو انجام بدیم ، به جای استفاده از کرسر چه کار باید انجام داد. (منظور همون Set_Based)
اگر اساتید محترم لطف کنند مراحل یا دستورات احتمالی رو شفاف توضیح بدند تا ابهامات در این مورد برطرف بشه.
پیشاپیش تشکر می کنم.

محمد سلیم آبادی
سه شنبه 31 فروردین 1389, 07:22 صبح
سلام،
پیمایش یا پردازش سطر به سطر (row by row modification/processing) بحث جدایی دارد.
مساله این نیست که اصلا از کرسر استفاده نشود. مساله این است که برخی از افراد از روی نا آشنا بودن با زبان SQL و قابلیت های T-SQL، مسائلی را که با روشهای خیلی بهتر می توان حل کرد را با کرسر پیاده سازی می کنند!

ضمیمه:
تکنیک هایی وجود دارد که بتوانیم مقادیر موجود در سطرها را استخراج کرده و به متغیر هایی انتساب دهیم. بطور مثال با کمک تابع row_number به هر سطر از جدول یک شماره داده و در حلقه، سطر خاص را با کمک یک متغیر (که شماره ی سطر را در خود نگه می دارد) بدست آورده و با استفاده از assignment select مقادیر را به متغیر ها انتساب می دهیم، شبیه به این کد:



SELECT Rank = Row_numner() over(order by (select 1)), *
INTO #temp
FROM @table_name

Declare @i int
WHILE @i <= (SELECT SUM(1) FROM table)name)
BEGIN
SELECT @value1 =Column1, @calue2 = Column2
FROM #temp
WHERE Rank = @i

SET @i = @i + 1
END