Freigeben über


Ändern von Daten durch Verwenden eines Cursors

Die ADO-, OLE DB- und ODBC-APIs (Application Programming Interfaces, Schnittstellen für Anwendungsprogrammierung) unterstützen das Aktualisieren der aktuellen Zeile, in der eine Anwendung in einem Resultset positioniert ist. Die folgenden Schritte beschreiben den grundlegenden Vorgang:

  1. Binden der Resultsetspalten an Programmvariablen.

  2. Ausführen der Abfrage.

  3. Aufrufen von API-Funktionen oder -Methoden zum Positionieren der Anwendung in einer Zeile im Resultset.

  4. Auffüllen der gebundenen Programmvariablen mit den neuen Datenwerten für alle zu aktualisierenden Spalten.

  5. Aufrufen einer der folgenden Funktionen oder Methoden zum Einfügen der Zeile:

    • Rufen Sie in ADO die Update-Methode des Recordset-Objekts auf.

    • Rufen Sie in OLE DB die SetData-Methode der IRowsetChange-Schnittstelle auf.

    • Rufen Sie in ODBC die SQLSetPos-Funktion mit der Option SQL_UPDATE auf.

Beim Verwenden eines Transact-SQL-Servercursors können Sie die aktuelle Zeile mit einer UPDATE-Anweisung aktualisieren, die eine WHERE CURRENT OF-Klausel enthält. Mit dieser Klausel vorgenommene Änderungen wirken sich nur auf die Zeile aus, in der der Cursor positioniert ist. Wenn ein Cursor auf einer Verknüpfung basiert, wird nur die Tabelle geändert, die mit table_name in der UPDATE-Anweisung angegeben wurde. Andere im Cursor enthaltene Tabellen sind davon nicht betroffen.

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;
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 2 
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO

Informationen zu Verknüpfungen finden Sie unter Grundlegendes zu Joins.