Cursores controlados por conjunto de claves (motor de base de datos)

La pertenencia y el orden de las filas en un cursor controlado por conjuntos de claves se fijan al abrir el cursor. Los cursores controlados por conjuntos de claves se supervisan mediante un conjunto de identificadores únicos (claves) denominado conjunto de claves. Las claves se generan a partir de un conjunto de columnas que identifican las filas del conjunto de resultados de forma unívoca. El conjunto de claves es el conjunto de valores de clave de todas las filas que han sido calificadas para la instrucción SELECT en el momento de abrirse el cursor. El conjunto de claves de un cursor controlado por conjuntos de claves se genera en tempdb al abrir el cursor.

Los valores de datos modificados en las columnas que no pertenecen al conjunto de claves (modificados por el propietario del cursor o confirmados por otros usuarios) se hacen visibles a medida que el usuario se desplaza por el cursor. Las inserciones en la base de datos que se realizan fuera del cursor no son visibles a menos que se cierre éste y se vuelva a abrir. Las inserciones realizadas con el cursor mediante una función de la API como, por ejemplo, la función SQLSetPos de ODBC, son visibles al final del cursor. @@FETCH_STATUS devuelve el estado "fila no encontrada" cuando se intenta recuperar una fila que se ha eliminado tras abrir el cursor. El proceso de actualizar una columna de clave es como el de eliminar el valor de clave antiguo para, a continuación, insertar un valor de clave nuevo. El valor de la nueva clave no es visible si la actualización no se realizó por medio del cursor, pero se mostrará al final del cursor si la actualización se realizó por medio del cursor con una función de la API como SQLSetPos o la cláusula WHERE CURRENT OF y la instrucción SELECT de Transact-SQL no contenían una condición JOIN en la cláusula FROM. El valor de la nueva clave no es visible si la inserción contenía una tabla remota en la cláusula FROM. Los intentos de recuperar el valor de clave antiguo obtienen el mismo estado de "fila no encontrada" que cuando se elimina una fila.

Nota

No es posible utilizar un índice en columnas calculadas cuando se declara un cursor controlado por conjunto de claves en una tabla remota. Puede crear otro índice para proporcionar las claves únicas para esa tabla remota.