یک مثال
| 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