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

Обновления и удаления в курсоре.




Обновляемые курсоры поддерживают инструкции изменения данных, которые обновляют строки через курсор.

При позиционировании в строке обновляемого курсора можно выполнить операции обновления или удаления в отношении строк базовой таблицы, которые использовались для построения текущей строки курсора. Такие обновления называются позиционированными.

Позиционированные обновления выполняются в том же соединении, которым был открыт курсор. Это позволяет использовать для изменения данных и для курсора общее пространство транзакций и препятствует блокированию обновлений блокировками, принадлежащими курсору.

 

Существует два метода для выполнения позиционированных обновлений в курсоре:

· С помощью предложения 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

Поделиться:





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





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



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