Condividi tramite


Cursori gestiti da keyset (Motore di database)

L'appartenenza e l'ordine delle righe di un cursore gestito da keyset vengono fissati al momento dell'apertura del cursore. I cursori gestiti da keyset vengono controllati da un set di identificatori univoci, ovvero chiavi, definiti keyset. Le chiavi sono costituite da un set di colonne che identificano in modo univoco le righe del set di risultati. Il keyset corrisponde al set di valori chiave di tutte le righe risultanti dall'istruzione SELECT al momento dell'apertura del cursore. Il keyset di un cursore gestito da keyset viene generato nel database tempdb all'apertura del cursore.

Le modifiche ai valori dei dati di colonne prive di keyset (create dal proprietario del cursore o di cu viene eseguito il commit da altri utenti) sono visibili quando l'utente scorre il cursore. Gli inserimenti nel database eseguiti all'esterno del cursore non sono visibili nel cursore, a meno che il cursore non venga chiuso e quindi riaperto. Gli inserimenti eseguiti nel cursore tramite una funzione API, ad esempio la funzione ODBC SQLSetPos, sono visibili alla fine del cursore. La variabile @@FETCH_STATUS restituisce uno stato di riga mancante quando si tenta di recuperare una riga eliminata dopo l'apertura del cursore. L'aggiornamento di una colonna chiave equivale all'eliminazione del valore chiave esistente tramite inserimento del nuovo valore chiave. Il nuovo valore chiave non è visibile se l'aggiornamento non è stato eseguito nel cursore. Se per l'aggiornamento viene utilizzata una funzione API, ad esempio SQLSetPos o la clausola WHERE CURRENT OF di Transact-SQL e l'istruzione SELECT non contiene una condizione JOIN nella clausola FROM, il nuovo valore chiave è visibile alla fine del cursore. Tale valore non è invece visibile se nella clausola FROM dell'istruzione di inserimento è inclusa una tabella remota. In corrispondenza dei tentativi di recupero del valore chiave precedente, viene restituito lo stesso stato di riga mancante ottenuto quando si eseguono tentativi di recupero di una riga eliminata.

Nota

Non è possibile utilizzare un indice in colonne calcolate quando si dichiara un cursore gestito da keyset in una tabella remota. È tuttavia possibile creare un altro indice per ottenere le chiavi univoche per la tabella remota.