Excluindo linhas em conjuntos de resultados

ADO, OLE DB e ODBC APIs oferecem suporte à exclusão da linha atual em que um aplicativo está posicionado em um conjunto de resultados. O aplicativo executa uma instrução e busca linhas do conjunto de resultados. Depois que um aplicativo tiver buscado a linha, pode-se utilizar as seguintes funções ou métodos para excluir a linha:

  • Aplicativos ADO utilizam o método Delete do objeto Recordset.

  • Aplicativos OLE DB utilizam o método DeleteRows da interface IRowsetChange.

  • Aplicativos ODBC utilizam a função SQLSetPos com a opção SQL_DELETE.

  • Aplicativos DB-Library utilizam dbcursor para executar uma operação CRS_DELETE.

Scripts Transact-SQL, procedimentos armazenados e gatilhos podem utilizar a cláusula WHERE CURRENT OF em uma instrução DELETE para excluir a linha do cursor em que está posicionado atualmente. O exemplo a seguir exclui uma única linha da tabela EmployeePayHistory utilizando um cursor chamado complex_cursor. DELETE que afeta somente a única linha atualmente buscada do 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