Condividi tramite


Elaborazione di istruzioni di eliminazione e aggiornamento posizionato

Importante

Questa funzionalità verrà rimossa nelle versioni future 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 di aggiornamento ed eliminazione posizionate sostituendo la clausola WHERE CURRENT OF in tali istruzioni con una clausola WHERE che enumera i valori archiviati nella cache per ogni colonna associata. La libreria di cursori passa le istruzioni UPDATE e DELETE appena costruite al driver per l'esecuzione. Per le istruzioni di aggiornamento posizionate, la libreria di cursori aggiorna quindi la cache dai valori nei buffer del set di righe e imposta il valore corrispondente nella matrice di stato della riga su SQL_ROW_UPDATED. Per le istruzioni delete posizionate, imposta il valore corrispondente nella matrice di stato della riga su SQL_ROW_DELETED.

Attenzione

La clausola WHERE costruita dalla libreria di cursori per identificare la riga corrente non può identificare le righe, identificare una riga diversa o identificare più righe. Per altre informazioni, vedere Costruzione di istruzioni di ricerca, più avanti in questa appendice.

Le istruzioni di aggiornamento ed eliminazione posizionate sono soggette alle restrizioni seguenti:

  • Le istruzioni di aggiornamento ed eliminazione posizionate possono essere usate solo nei casi seguenti: quando un'istruzione SELECT ha generato il set di risultati, quando l'istruzione SELECT non contiene un join, una clausola UNION o una clausola GROUP BY e quando le colonne che utilizzano un alias o un'espressione nell'elenco di selezione non sono associate a SQLBindCol.

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

  • Se il driver supporta una sola istruzione attiva, la libreria di cursori recupera il resto del set di risultati e quindi recupera il set di righe corrente dalla cache prima di eseguire un'istruzione di aggiornamento o eliminazione 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 un'istruzione di aggiornamento o eliminazione posizionata viene eseguita su una colonna di una tabella che include una colonna timestamp che viene aggiornata automaticamente ogni volta che viene eseguito un aggiornamento, tutte le istruzioni di aggiornamento o eliminazione successive avranno esito negativo se la colonna timestamp è associata. Ciò si verifica perché l'istruzione di aggiornamento o eliminazione cercata creata dalla libreria di cursori non identificherà in modo accurato la riga da aggiornare. Il valore nell'istruzione cercata per la colonna timestamp non corrisponderà al valore aggiornato automaticamente della colonna timestamp.