.:: محمدحسین فخرآوری ::.

با سلام و خسته نباشید به شما دوست عزیز به قسمت موضوعات وبلاگ مراجعه کنید. 09173700916

بهترین روش پیاده سازی Cursor

یک مثال

Declare @Tbl Table (ForumName NVARCHAR(100),Subject NVARCHAR(100),TopicID int)
Declare @Tb2 Table (ForumName NVARCHAR(100),Subject NVARCHAR(100),TopicID int)

insert into @Tbl SELECT B_Forums.ForumName, B_Topics.Subject, B_Topics.TopicID FROM B_Forums

DECLARE @ForumName NVARCHAR(100),@Subject NVARCHAR(100),@TopicID int;

DECLARE Table_Cursor CURSOR
FOR

SELECT ForumName,Subject,TopicID FROM @Tbl

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @ForumName,@Subject,@TopicID
WHILE (@@FETCH_STATUS = 0)
BEGIN

IF NOT EXISTS(SELECT top(1)ForumName FROM @Tb2 WHERE ForumName=@ForumName)
INSERT INTO @Tb2 SELECT @ForumName,@Subject,@TopicID

FETCH NEXT FROM Table_Cursor INTO @ForumName,@Subject,@TopicID
END CLOSE Table_Cursor DEALLOCATE Table_Cursor

select * from @Tb2
DECLARE @id NVARCHAR(MAX),@name NVARCHAR(MAX)

DECLARE Table_Cursor CURSOR
FOR


SELECT cast([CategoryID]as nvarchar),[CategoryName]FROM [B_Categories]


OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @name,@id
WHILE (@@FETCH_STATUS = 0)
BEGIN

print (N'نام موضوع: ' + @name + ' کد: ' + @id +']')

FETCH NEXT FROM Table_Cursor INTO @name,@id
END CLOSE Table_Cursor DEALLOCATE Table_Cursor


Cursor :

هنگام استفاده از دستورات SQL نظیر Select کلیه رکوردهای درخواستی بطور کامل استخراج می گردد اما در مواردی نیاز است که رکوردهای استخراج شده تحت شرایطی خاص مورد پردازش مجدد قرار گرفته و به برنامه درخواست کننده ارسال گردد در این صورت استفاده از کرسرها بسیار حائز اهمیت خواهد بود در واقع برای استفاده از یک کرسر می توان به ترتیب مراحل ذیل عمل نمود.
- یک متغیر از نوع کرسر تعریف می گردد. که شامل دستور Select درخواستی خواهد بود.
- با استفاده از دستور Open یک کرسر آماده استفاده می گردد.
- با استفاده از دستور Fetch حرکت درون یک کرسر امکان پذیر می گردد که در این حالت مقدار فیلدهای اعلام شده در رکورد جاری در دسترس می باشد.
- با استفاده از دستور Close کرسر فعال شده بسته می شود.
- با استفاده از Deallcate فضای اختصاص داده شده برای کرسر آزاد می گردد.

منبع: http://barnamenevis.org/showthread.php?214403

برچسب‌ها: OLAP
محمدحسین فخرآوری ، یکشنبه ۱۳۹۴/۰۹/۰۱ ، 0:9