Удаление строк в результирующих наборах

Поддержка 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