Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Jan 16 1897 12:00AM –сохраняются последние значения переменных.




Измененный пример:

DECLARE MyCursor1 SCROLL CURSOR FOR (select * from Authors)

OPEN MyCursor1

FETCH FIRST FROM MyCursor1

WHILE @@FETCH_STATUS = 0

BEGIN

FETCH NEXT FROM MyCursor1 -- отсутствует INTO!!!!!!!

END

CLOSE MyCursor1

DEALLOCATE MyCursor1

Результат:

Пример: объявляется простой курсор для строк таблицы Person.Contact, в которых фамилия начинается на букву B, и используется инструкция FETCH NEXT для перемещения по строкам. Инструкции FETCH возвращают значение для столбца, указываемого в DECLARE CURSOR в качестве результирующего набора, состоящего из одной строки. Ограничивается количество читаемых строк (10).

 

USE AdventureWorks

GO

DECLARE @n As Int

DECLARE contact_cursor CURSOR FOR

SELECT LastName FROM Person.Contact

WHERE LastName LIKE 'B%'

ORDER BY LastName

set @n=0

OPEN contact_cursor

FETCH NEXT FROM contact_cursor

WHILE @@FETCH_STATUS = 0 and @n<=10

BEGIN

FETCH NEXT FROM contact_cursor --возращает LastName

set @n=@n+1

END

CLOSE contact_cursor

DEALLOCATE contact_cursor

GO

Результат:

 

Пример: аналогичен предыдущему, за исключением того, что выход инструкций FETCH сохраняется в локальных переменных, а не возвращается непосредственно клиенту. Инструкция PRINT объединяет переменные в одну строку и возвращает их клиенту.

USE AdventureWorks

GO

DECLARE @LastName varchar(50), @FirstName varchar(50)

DECLARE contact_cursor CURSOR FOR --динамический, прокрутка только вперед

SELECT LastName, FirstName FROM Person.Contact

WHERE LastName LIKE 'B%'

ORDER BY LastName, FirstName

OPEN contact_cursor

FETCH NEXT FROM contact_cursor

INTO @LastName, @FirstName

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT 'Contact Name: ' + @FirstName + ' ' + @LastName

FETCH NEXT FROM contact_cursor

INTO @LastName, @FirstName

END

 

CLOSE contact_cursor

DEALLOCATE contact_cursor

GO

Результат:

 

Пример: В этом примере создается курсор SCROLL, предоставляющий все возможности прокрутки при помощи параметров LAST, PRIOR, RELATIVE и ABSOLUTE.

USE AdventureWorks

GO

--Результирующий набор

SELECT Top (10) LastName, FirstName FROM Person.Contact

ORDER BY LastName, FirstName

 

DECLARE contact_cursor SCROLL CURSOR FOR –статический курсор

SELECT Top (10) LastName, FirstName FROM Person.Contact

ORDER BY LastName, FirstName

OPEN contact_cursor

-- Перейти к последней строке курсора

FETCH LAST FROM contact_cursor

-- Перейти к предыдущей от текущей (посмотрите результат для последней строки)

FETCH PRIOR FROM contact_cursor

-- Перейти ко второй строке курсора

FETCH ABSOLUTE 2 FROM contact_cursor

-- Перейти на три строки вперед от текущей

FETCH RELATIVE 3 FROM contact_cursor

-- Перейти на две строки назад от текущей

FETCH RELATIVE -2 FROM contact_cursor

CLOSE contact_cursor

DEALLOCATE contact_cursor

GO

Результат:

 

@@CURSOR_ROWS - Возвращает число выбранных строк, имеющихся в последнем открытом курсоре в данном подключении.

Типы возвращаемых данных integer.

Возвращаемое значение:

Возвращаемое значение Описание
-1 Курсор является динамическим. Так как динамический курсор отражает все изменения, количество строк для курсора постоянно изменяется. Никогда не может быть точно определено, что все отмеченные строки были получены.
  Ни один курсор не был открыт, не было строк для последнего открытого курсора или последний открытый курсор закрыт или освобожден.
n Курсор полностью заполнен. Возвращенное значение (n) является общим количеством строк в курсоре.

Пример:

USE AdventureWorks

GO

DECLARE @I int, @n int

set @n=0

DECLARE contact_cursor2 CURSOR FOR –статический курсор

SELECT LastName FROM Person.Contact

WHERE LastName LIKE 'B%'

ORDER BY LastName

OPEN contact_cursor2

SET @I = @@CURSOR_ROWS

SELECT @I As 'Количество строк курсора'

FETCH NEXT FROM contact_cursor2

WHILE @@FETCH_STATUS = 0 And @n<5

BEGIN

set @n= @n + 1

SELECT @n

FETCH NEXT FROM contact_cursor2

END

CLOSE contact_cursor2

DEALLOCATE contact_cursor2

GO

Результат:

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...