Elaborazione di istruzioni di aggiornamento ed eliminazione posizionate

Importante

Questa funzionalità verrà rimossa in una versione futura di Windows. Evitare di usare questa funzionalità nel nuovo lavoro di sviluppo e pianificare la modifica delle applicazioni che attualmente usano questa funzionalità. Microsoft consiglia di usare la funzionalità cursore del driver.

La libreria di cursori supporta istruzioni positioned update e delete sostituendo la clausola WHERE CURRENT OF in tali istruzioni con una clausola WHERE che enumera i valori memorizzati nella sua cache per ogni colonna vincolata. La libreria di cursori passa le istruzioni e DELETE e appena costruite UPDATE al driver per l'esecuzione. Per le istruzioni di aggiornamento posizionate, la libreria di cursori aggiorna quindi la sua cache dai valori nei buffer del set di righe e imposta il valore corrispondente nell'array di stato delle righe a SQL_ROW_UPDATED. Per le istruzioni delete posizionate, imposta il valore corrispondente nell'array di stato delle righe a SQL_ROW_DELETED.

Caution

La clausola WHERE costruita dalla libreria di cursori per identificare la riga corrente può non identificare righe, identificare una riga diversa o identificare più di una riga. Per maggiori informazioni, vedi Costruzione delle Dichiarazioni Ricercate, più avanti in questa appendice.

Le istruzioni di aggiornamento e cancellazione posizionate sono soggette alle seguenti restrizioni:

  • Le istruzioni posizionate update e delete possono essere usate solo nei seguenti casi: quando un'istruzione SELECT genera il set di risultati; quando l'istruzione SELECT non conteneva una join, una clausola UNION o una clausola GROUP BY ; e quando qualsiasi colonna che utilizzava un alias o un'espressione nella lista select non era associata a SQLBindCol.

  • Se un'applicazione prepara un'istruzione di aggiornamento o cancellazione posizionata, deve farlo dopo aver chiamato SQLFetch o SQLFetchScroll. Sebbene la libreria di cursori invii l'istruzione al driver per la preparazione, essa chiude l'istruzione ed esegue direttamente quando l'applicazione chiama SQLExecute.

  • Se il driver supporta solo una istruzione attiva, la libreria di cursori recupera il resto del set di risultati e poi recupera il rowset corrente dalla sua cache prima di eseguire una istruzione di aggiornamento o delete posizionata. Se l'applicazione chiama quindi una funzione che restituisce metadati in un set di risultati (ad esempio, SQLNumResultCols o SQLDescribeCol), la libreria di cursori restituisce un errore.

  • Se una dichiarazione aggiornamento o cancellazione posizionata viene eseguita su una colonna di una tabella che include una colonna timestamp che viene automaticamente aggiornata ogni volta che viene eseguito un aggiornamento, tutte le successive istruzioni di aggiornamento o cancellazione posizionate falliranno se la colonna timestamp è legata. Questo avviene perché l'istruzione di aggiornamento o cancellazione ricercata creata dalla libreria di cursori non identificherà accuratamente la riga da aggiornare. Il valore nell'istruzione ricercata per la colonna timestamp non corrisponderà al valore automaticamente aggiornato della colonna timestamp.