Cursores controlados por conjunto de chaves (Mecanismo de Banco de Dados)
A associação e a ordem de linhas em um cursor controlado por conjunto de chaves são fixadas quando o cursor é aberto. Os cursores controlados por conjuntos de chaves são controlados por um conjunto exclusivo de identificadores, as chaves, conhecido como conjunto de chaves. As chaves são criadas a partir de um conjunto de colunas, que identificam exclusivamente as linhas no conjunto de resultados. O conjunto de chaves é o conjunto dos valores de chaves de todas as linhas qualificadas para a instrução SELECT no momento em que o cursor foi aberto. O conjunto de chaves para um cursor controlado por conjunto de chaves é criado no tempdb quando o cursor é aberto.
Alterações aos valores de dados nas colunas, que não são conjuntos de chaves (realizadas pelo proprietário do cursor ou confirmadas por outros usuários), são visíveis como rolagens do usuário pelo cursor. Inserções no banco de dados realizadas fora do cursor não são visíveis no cursor, exceto se o cursor for fechado e reaberto. Inserções realizadas pelo cursor usando uma função de API como a função ODBC SQLSetPos são visíveis no final do cursor. O @@FETCH_STATUS retorna um status de "linha não existente" quando é realizada uma tentativa de buscar uma linha excluída depois que o cursor foi aberto. Uma atualização em uma coluna de chave funciona como uma exclusão do valor de chave antigo, seguida de uma inserção do valor de chave novo. O novo valor de chave não é visível se a atualização não foi realizada pelo cursor; é visível ao final do cursor se a atualização foi realizada pelo cursor usando uma função de API como SQLSetPos ou uma cláusula Transact-SQL WHERE CURRENT OF e a instrução SELECT não continha uma condição de junção na cláusula FROM. O novo valor de chave não é visível se a inserção continha uma tabela remota na cláusula FROM. As tentativas de recuperar o valor de chave antigo obtém o mesmo status de busca de linha não existente.
Observação |
---|
Um índice em colunas computadas não pode ser usado na declaração de um cursor controlado por conjunto de chaves em uma tabela remota. Você pode criar outro índice para fornecer as chaves exclusivas para essa tabela remota. |