Freigeben über


Verarbeiten von positionierten UPDATE- und DELETE-Anweisungen

Wichtig

Dieses Feature wird in einer zukünftigen Version von Windows entfernt. Vermeiden Sie die Verwendung dieses Features in neuen Entwicklungsvorgängen, und planen Sie das Ändern von Anwendungen, die dieses Feature derzeit verwenden. Microsoft empfiehlt die Verwendung der Cursorfunktion des Treibers.

Die Cursorbibliothek unterstützt positionierte Update- und Delete-Anweisungen, indem die WHERE CURRENT OF-Klausel in solchen Anweisungen durch eine WHERE-Klausel ersetzt wird, die die in ihrem Cache gespeicherten Werte für jede gebundene Spalte aufzählt. Die Cursorbibliothek übergibt die neu erstellten UPDATE- und DELETE-Anweisungen zur Ausführung an den Treiber. Bei positionierten Updateanweisungen aktualisiert die Cursorbibliothek dann ihren Cache aus den Werten in den Rowsetpuffern und legt den entsprechenden Wert im Zeilenstatusarray auf SQL_ROW_UPDATED fest. Für positionierte delete-Anweisungen wird der entsprechende Wert im Zeilenstatusarray auf SQL_ROW_DELETED festgelegt.

Achtung

Die WHERE-Klausel , die von der Cursorbibliothek erstellt wurde, um die aktuelle Zeile zu identifizieren, kann keine Zeilen identifizieren, eine andere Zeile identifizieren oder mehrere Zeilen identifizieren. Weitere Informationen finden Sie unter Erstellen durchsuchter Anweisungen weiter unten in diesem Anhang.

Positionierte Update- und Delete-Anweisungen unterliegen den folgenden Einschränkungen:

  • Positionierte Update- und Delete-Anweisungen können nur in den folgenden Fällen verwendet werden: wenn das Resultset durch eine SELECT-Anweisung generiert wurde; wenn die SELECT-Anweisung keine Join-, UNION- oder GROUP BY-Klausel enthielt; und wenn Spalten, die einen Alias oder Ausdruck in der Auswahlliste verwendet haben, nicht an SQLBindCol gebunden waren.

  • Wenn eine Anwendung eine positionierte Update- oder Delete-Anweisung vorbereitet, muss sie dies tun, nachdem sie SQLFetch oder SQLFetchScroll aufgerufen hat. Obwohl die Cursorbibliothek die Anweisung zur Vorbereitung an den Treiber übermittelt, schließt sie die Anweisung und führt sie direkt aus, wenn die Anwendung SQLExecute aufruft.

  • Wenn der Treiber nur eine aktive Anweisung unterstützt, ruft die Cursorbibliothek den Rest des Resultsets ab und gibt dann das aktuelle Rowset aus dem Cache zurück, bevor eine positionierte Update- oder Delete-Anweisung ausgeführt wird. Wenn die Anwendung dann eine Funktion aufruft, die Metadaten in einem Resultset zurückgibt (z. B. SQLNumResultCols oder SQLDescribeCol), gibt die Cursorbibliothek einen Fehler zurück.

  • Wenn eine positionierte Update- oder Delete-Anweisung für eine Spalte einer Tabelle ausgeführt wird, die eine Zeitstempelspalte enthält, die bei jeder Aktualisierung automatisch aktualisiert wird, schlagen alle nachfolgenden aktualisierungs- oder delete-Anweisungen fehl, wenn die Zeitstempelspalte gebunden ist. Dies liegt daran, dass die gesuchte Update- oder Delete-Anweisung, die von der Cursorbibliothek erstellt wird, die zu aktualisierende Zeile nicht genau identifiziert. Der Wert in der durchsuchten Anweisung für die Zeitstempelspalte entspricht nicht dem automatisch aktualisierten Wert der Zeitstempelspalte.