Удаление строк в результирующих наборах
Поддержка ADO, OLE DB и ODBC API при удалении текущей строки, на которой располагается приложение в результирующем наборе. Приложение исполняет инструкцию, а затем производит выборку строк из результирующего набора. После того, как приложение получило строку, для удаления строки оно может использовать следующие функции или методы:
Приложения ADO используют метод Delete объекта Recordset.
Приложения OLE DB используют метод DeleteRows интерфейса IRowsetChange.
Приложения ODBC используют функцию SQLSetPos с параметром SQL_DELETE.
Приложения DB-library используют dbcursor для выполнения операции CRS_DELETE.
Сценарии, хранимые процедуры и триггеры языка Transact-SQL могут использовать предложение WHERE CURRENT OF инструкции DELETE для удаления строки курсора, на которой они в данный момент расположены. Следующий пример удаляет одну строку из таблицы EmployeePayHistory с помощью курсора под названием complex_cursor. Инструкция DELETE затрагивает только одну строку таблицы, полученную от курсора.
USE AdventureWorks2008R2;
GO
DECLARE complex_cursor CURSOR FOR
SELECT a.BusinessEntityID
FROM HumanResources.EmployeePayHistory AS a
WHERE RateChangeDate <>
(SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS b
WHERE a.BusinessEntityID = b.BusinessEntityID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO