Переименование: хранимой процедурой 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!