Обновления и удаления в курсоре.
Обновляемые курсоры поддерживают инструкции изменения данных, которые обновляют строки через курсор. При позиционировании в строке обновляемого курсора можно выполнить операции обновления или удаления в отношении строк базовой таблицы, которые использовались для построения текущей строки курсора. Такие обновления называются позиционированными. Позиционированные обновления выполняются в том же соединении, которым был открыт курсор. Это позволяет использовать для изменения данных и для курсора общее пространство транзакций и препятствует блокированию обновлений блокировками, принадлежащими курсору.
Существует два метода для выполнения позиционированных обновлений в курсоре: · С помощью предложения Transact-SQL WHERE CURRENT OF для инструкции UPDATE или DELETE. · С помощью функции или метода позиционированного обновления из API-интерфейса базы данных.
Выполнение позиционированных обновлений с использованием Transact-SQL. Предложение Transact-SQL WHERE CURRENT OF обычно используется в хранимых процедурах, триггерах и сценариях Transact-SQL, когда изменение данных необходимо осуществлять на основе определенных строк в курсоре. Хранимой процедурой, триггером или сценарием выполняются следующие действия: · Объявление и открытие курсора с помощью инструкций DECLARE и OPEN. · Использование инструкции FETCH для позиционирования в строке курсора. · Выполнение инструкции UPDATE или DELETE с использованием предложения WHERE CURRENT OF. При этом значение cursor_name из инструкции DECLARE используется в качестве значения cursor_name в предложении WHERE CURRENT OF.
Изменение и удаление данных. Для выполнения изменений с помощью курсора необходимо выполнить команду UPDATE в следующем формате:
UPDATE имя_таблицы – редактирование только в одной таблице SET {имя_столбца={ DEFAULT | NULL | выражение}}[,...n] WHERE CURRENT OF {{[GLOBAL] имя_курсора} |@имя_переменной_курсора}
За одну операцию могут быть изменены несколько столбцов текущей строки курсора, но все они должны принадлежать одной таблице. Пример: изменяется через курсор значение поля CreditRating в первой записи таблицы Purchasing.Vendor. DECLARE vend_cursor1 CURSOR—динамический курсор FOR SELECT * FROM Purchasing.Vendor OPEN vend_cursor1 FETCH NEXT FROM vend_cursor1 UPDATE Purchasing.Vendor SET CreditRating=2 WHERE CURRENT OF vend_cursor1 Пример: CREATE TABLE dbo.Table1 (c1 int PRIMARY KEY NOT NULL, c2 int NOT NULL); GO CREATE TABLE dbo.Table2 (d1 int PRIMARY KEY NOT NULL, d2 int NOT NULL); GO INSERT INTO dbo.Table1 VALUES (1, 10); INSERT INTO dbo.Table2 VALUES (1, 20); INSERT INTO dbo.Table2 VALUES (2, 30); GO DECLARE abc CURSOR LOCAL FOR SELECT c1, c2 FROM dbo.Table1;-- курсор объявлен для таблицы Table1 OPEN abc; FETCH abc;-- находимся на первой строке --изменяется первая строка Table1 UPDATE dbo.Table1 -- изменяем первую строку SET c2 = c2 + d2
Читайте также: VIII. О Пути Удаления и Пути Возврата Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|