Поделиться Поделиться

Используемые в ORDER BY должны быть индексированными

FAST_FORWARD- курсор быстрого доступа, непрокручиваемый , только чтение

READ_ONLY- курсор не может вносить изменений в исходные данные, а

пользователи – могут.

SCROLL_LOCKS- обновления могут быть выполнены только курсором, а другие

Операторы UPDATE выполняться не будут.

OPTIMISTIC- позволяет осуществлять обновление строк в курсоре и вне его.

Пример:

Курсорные переменные

DECLARE s1 CURSOR

LOCAL

FAST_FORWARD

FOR SELECT f FROM bd

DECLARE @ a1 CURSOR

SET a1=s1

При объявлении переменной типа CURSOR выражение DECLARE s1 CURSOR….

Не создает курсор

Открытие, закрытие и освобождение курсора

OPEN [GLOBAL] курсор_или _переменная ……………..создает набор записей

CLOSE [GLOBAL] курсор_или _переменная…………….курсор закрывается

DEALLOCATE [GLOBAL] курсор_или _переменная…..удаляет идентификатор или

Курсорную переменную, но

Не обязательно сам курсор

Манипулирование строками с помощью курсора

FETCH курсор_или_переменная ……..извлекает указанную строку из строк курсора

FETCH курсор_или_переменная………список переменных должен содержать пере-

INTO список_переменных менную для каждого столбца, присутствующего

В SELECT.

Выбор строки с записью в переменную

DECLARE a1 CURSOR

LOCAL

FOR SELECT tn, f FROM bd

DECLARE @s1 INT, @s2 CHAR(20)

OPEN a1

FETCH a1 INTO @s1, @s2

PRINT str(@s1,8,2)+@s2

CLOSE a1

DEALLOCATE a1

Выбор строки по абсолютной позиции

DECLARE a1 CURSOR

LOCAL

KEYSET

FOR SELECT tn, f FROM bd

DECLARE @s1 INT, @s2 CHAR(20)

OPEN a1

FETCH FIRST FROM a1 INTO @s1, @s2

PRINT str(@s1,8,2)+@s2

FETCH ABSOLUTE 5 FROM a1 INTO @s1, @s2

PRINT str(@s1,8,2)+@s2

CLOSE a1

DEALLOCATE a1

Выбор строки по их относительной позиции

DECLARE a1 CURSOR

LOCAL

KEYSET

FOR SELECT tn, f FROM bd

DECLARE @s1 INT, @s2 CHAR(20)

OPEN a1

FETCH ABSOLUTE 5 FROM a1 INTO @s1, @s2

PRINT str(@s1,8)+ ' '+@s2

FETCH RELATIVE 3 FROM a1 INTO @s1, @s2

PRINT str(@s1,8)+ ' '+@s2

FETCH RELATIVE -3 FROM a1 INTO @s1, @s2

PRINT str(@s1,8)+ ' '+@s2

CLOSE a1

DEALLOCATE a1

FETCH NEXT для быстродействующего курсора

DECLARE a1 CURSOR

LOCAL

FAST_FORWARD

FOR SELECT tn, f FROM bd

DECLARE @s1 INT, @s2 CHAR(20)

DECLARE @count int

OPEN a1

SET @count=1

WHILE @count<=6

BEGIN

FETCH a1 INTO @s1, @s2

PRINT str(@s1,8,2)+@s2

SET @count=@count+1

END

--FETCH RELATIVE 3 FROM a1 INTO @s1, @s2

--PRINT str(@s1,8)+ ' '+@s2

FETCH NEXT FROM a1 INTO @s1, @s2

PRINT str(@s1,8,2)+@s2

--FETCH ABSOLUTE 5 FROM a1 INTO @s1, @s2

--PRINT str(@s1,8,2)+@s2

CLOSE a1

DEALLOCATE a1

Модификация и удаление строк через курсоры

DECLARE A1 CURSOR

LOCAL

DYNAMIC

FOR SELECT TN,SN FROM i1

FOR UPDATE

OPEN A1

-- читаем первую строку

FETCH FIRST FROM A1

-- изменить,удалить строку

UPDATE I1 SET tn=55,SN=4444 WHERE CURRENT OF A1

--DELETE I1 WHERE CURRENT OF A1

--читаем

Select tn,SN FROM I1

CLOSE A1

DEALLOCATE A1@@CURCOR_ROWS ……….возвращает кол-во строк последнего курсора, если:

-m –курсор содержит m строк, полностью не заполнен

-1 – курсор является динамическим

Содержит 0 строк или не открыт

n – кол-во строк в курсоре n

Хранимые процедуры (ХП)

Это единственное средство выполнения операторов Transact-Sql. По сравнению со сценариями ХП обладают рядом преимуществ:

-ХП являются объектами БД и размещается с файлом БД, перемещается вместе с ним;

-ХП позволяют передавать данные процедуре и принимать от процедуры данные и

процедурный итоговый код;

-ХП представляются в оптимизированной форме, что ускоряет их выполнение.

Различают системные и пользовательские процедуры.

Системные процедуры хранятся в главной БД иначинаются сsp_

Примеры:

sp_addligin –добавляет учетные записи

sp_rename – переименовывает объекты БД

sp_renamedb - переименовывает БД

ХП начинаются с dt _ и используются для управления и

преобразования данных

ХП с входными параметрами

EXEC имя_процедуры параметр [, параметр]

Примеры: EXEC sp_helpdb 'aromatherapy'

EXEC sp_dboption 'aromatherapy','read only'

ХП с именнованными параметрами

EXEC имя_процедуры @имя_параметра=значение [,@имя_параметра=значение]

Пример: EXEC sp_dboption @optname=’read only’, @dbname=’aromatherapy’

← Предыдущая страница | Следующая страница →