Eliminar filas de conjuntos de resultados

Las API ADO, OLE DB y ODBC permite eliminar la fila actual en la que está colocada una aplicación en un conjunto de resultados. La aplicación ejecuta una instrucción y, a continuación, recupera las filas del conjunto de resultados. Una vez que la aplicación ha recuperado la fila, puede utilizar las siguientes funciones o métodos para eliminarla:

  • Las aplicaciones ADO utilizan el método Delete del objeto Recordset.

  • Las aplicaciones OLE DB utilizan el método DeleteRows de la interfaz IRowsetChange.

  • Las aplicaciones ODBC utilizan la función SQLSetPos con la opción SQL_DELETE.

  • Las aplicaciones de bibliotecas de bases de datos utilizan dbcursor para realizar una operación CRS_DELETE.

Los scripts, procedimientos almacenados y desencadenadores de Transact-SQL pueden utilizar la cláusula WHERE CURRENT OF en una instrucción DELETE para eliminar la fila de cursor en la que se encuentran. En el ejemplo siguiente se elimina una sola fila de la tabla EmployeePayHistory mediante un cursor denominado complex_cursor. DELETE sólo afecta a la única fila que se recupera actualmente del cursor.

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