Freigeben über


Löschen von Zeilen in Resultsets

Die ADO-, OLE DB- und ODBC-APIs (Application Programming Interfaces, Schnittstellen für Anwendungsprogrammierung) unterstützen das Löschen der aktuellen Zeile, in der eine Anwendung in einem Resultset positioniert ist. Die Anwendung führt eine Anweisung aus und ruft dann Zeilen aus dem Resultset ab. Nachdem eine Anwendung die Zeile abgerufen hat, kann sie die Zeile mithilfe der folgenden Funktionen oder Methoden löschen:

  • ADO-Anwendungen verwenden die Delete-Methode des Recordset-Objekts.

  • OLE DB-Anwendungen verwenden die DeleteRows-Methode der IRowsetChange-Schnittstelle.

  • ODBC-Anwendungen verwenden die SQLSetPos-Funktion mit der Option SQL_DELETE.

  • DB-Library-Anwendungen verwenden dbcursor zur Durchführung eines CRS_DELETE-Vorgangs.

Transact-SQL-Skripts, gespeicherte Prozeduren und Trigger können die WHERE CURRENT OF-Klausel in einer DELETE-Anweisung zum Löschen der Cursorzeile verwenden, auf der sie jeweils positioniert sind. Das folgende Beispiel löscht eine einzelne Zeile aus der EmployeePayHistory-Tabelle und verwendet dabei einen Cursor namens complex_cursor. DELETE wirkt sich nur auf die eine Zeile aus, die aktuell vom Cursor abgerufen wird.

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