Переименование: хранимой процедурой sp_rename, например,




EXEC sp_rename ‘OldName’, ‘NewName’, ‘OBJECT’

Удаление:


DROP VIEW <имя представления>

Курсоры.

Для реализации многострочных запросов вводится новое понятие — понятие курсора или указателя набора записей.

Курсор– средство работы клиентских приложений с отдельными строками результирующего набора данных

Использование:

- Результирующий набор данных слишком большой для хранения на стороне клиентского приложения

- Требуется обращение к отдельным строкам результирующего набора данных по номеру

- Реализация сложных алгоритмов обработки данных, в которых результаты могут зависеть от нескольких строк

Реализации курсоров:

- Курсоры Transact-SQL: элемент языка Transact-SQL, доступны для использования в скриптах и хранимых процедурах. Реализуются на сервере баз данных

- Курсоры сервера: доступны клиентским приложениям в виде API. Используются реализациями различных технологий, например, ODBC, OLEDB и т.д.

- Курсоры клиента: реализуются самим клиентским приложением для организации доступа к данным, переданным от сервера БД к клиенту.

Типы курсоров:

- Статические (курсор моментального снимка). Результат запроса сохраняется в БД tempdb. Изменение данных не влияет на ранее созданную копию данных, а изменения данных в курсоре не фиксируются в источнике.

- Динамические. Выборка данных выполняется каждый раз при получении строки курсора. Допустимы операции изменения и удаления данных.

Поведение курсоров:

- Последовательные (forward-only): доступ к данным только последовательно от первой стоки – к последней. Частный случай динамического курсора.

- Прокручиваемые (scrollable): допускается переход к любой строке в любом направлении.

Управление курсорами:

- Создание (объявление) курсора. В памяти создается объект (переменная) заданного типа.

- Открытие курсора. Курсор наполняется данными, которые хранятся в tempdb.

- Выборка и изменение данных при помощи курсора.

- Закрытие курсора. Освобождается tempdb от данных.

- Освобождение (уничтожение) курсора. Объект курсора удаляется из памяти и повторно не может быть использован.

Создание(объявление) курсора:

DECLAREDebtorCursor(определяет выполняемый запрос, задает имя курсора и связывает результаты запроса с заданным курсором. Оператор подобен операторам описания данных в языках программирования.)

INSENSITIVECURSORFOR (определяет режим создания набора строк, все изменения в исходных таблицах не видны в нем)

SELECT p.title, r.reader_id, r.last_name

FROM dbo.Publications AS p INNER JOIN

dbo.Exemplars AS e ON p.isbn = e.isbn INNER JOIN

dbo.Readers AS r ON e.reader_id = r.reader_id

WHERE (e.date_out + 30 <GETDATE())

FORREADONLY (изменения и обновления исходных таблиц не будут выполняться с использованием данного курсора)

 

Открытие курсора:

OPEN [GLOBAL] <имя курсора>(устанавливает указатель записей перед первой строкой виртуального набора строк результата.)
глобальные курсоры – для обмена данными
OPENDebtorCursor

 

Считывание данных:

Упрощенный синтаксис

FETCH[ [NEXT | PRIOR | FIRST | LAST | ABSOLUTEn | RELATIVEn]

FROM] { [GLOBAL ] <имя курсора> }

[ INTO@variable_name[ ,...n] ]
Оператор FETCH продвигает указатель записей на следующую позицию в виртуальном наборе записей

Функция @@FETCH_STATUS возвращает статус выполнения последней операции FETCH

Закрытие и удаление курсора:

- CLOSE<имя курсора>
После закрытия курсор можно повторно использовать (после OPEN), но данные будут другие

- DEALLOCATE<имя курсора> (здесь оператор закрытия курсора не уничтожает набор данных, связанный с курсором, он только закрывает к нему доступ и освобождает все блокировки, которые ранее были связаны с данным курсором.)

Примерсчитыванияданных:

DECLARE DebtorCursor

INSENSITIVE CURSOR FOR

SELECT p.title, r.reader_id, r.last_name

FROM dbo.Publications AS p INNER JOIN

dbo.Exemplars AS e ON p.isbn = e.isbn INNER JOIN

dbo.Readers AS r ON e.reader_id = r.reader_id

WHERE (e.date_out<GETDATE())

FOR READ ONLY

DECLARE @title NVARCHAR(30), @readerId INT, @lastName NVARCHAR(30)

OPEN DebtorCursor

FETCH NEXT FROM DebtorCursor INTO @title, @readerId, @lastName

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT @title + ' ' + STR(@readerId) + ' ' + @lastName

 FETCH NEXT FROM DebtorCursor INTO @title, @readerId, @lastName

END

CLOSE DebtorCursor

DEALLOCATE DebtorCursor

Изменениеданных:

Для изменения и удаления данных используются особый синтаксис команд UPDATEи DELETE, у которых в части WHERE указывается курсор

Ограничения:

- запрос в курсоре должен быть только из одной таблицы

- в запросе не должно быть ORDER BY, DISTINCT, GROUP BY

- в UPDATE могут изменяться только те столбцы, которые были указаны в объявлении курсора

Примеризмененияданных:

DECLARE ShortTimeCursor CURSOR FOR

SELECT date_out

FROM Exemplars

WHERE (date_out<GETDATE() -1)

FOR UPDATE

OPEN ShortTimeCursor

FETCH NEXT FROM ShortTimeCursor

WHILE @@FETCH_STATUS = 0

BEGIN

UPDATE Exemplars SET date_out = date_out + 1

WHERE CURRENT OF ShortTimeCursor

FETCH NEXT FROM ShortTimeCursor

END

CLOSE ShortTimeCursor

DEALLOCATE ShortTimeCursor

 

 


Дата добавления: 2018-08-06; просмотров: 212; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!