Processar instruções de atualização e exclusão posicionadas

Importante

Esse recurso será removido em uma versão futura do Windows. Evite usar esse recurso em um novo trabalho de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. A Microsoft recomenda usar a funcionalidade de cursor do driver.

A biblioteca de cursores suporta instruções positioned update e delete substituindo a cláusula WHERE CURRENT OF nessas instruções por uma cláusula WHERE que enumera os valores armazenados em seu cache para cada coluna vinculada. A biblioteca de cursores passa as novas instruções e UPDATEDELETE e para o driver para execução. Para instruções de atualização posicionadas, a biblioteca de cursores então atualiza seu cache a partir dos valores nos buffers de linhas e define o valor correspondente no array de status de linha como SQL_ROW_UPDATED. Para instruções delete posicionadas, ele define o valor correspondente no array de status de linha para SQL_ROW_DELETED.

Caution

A cláusula WHERE construída pela biblioteca de cursores para identificar a linha atual pode falhar em identificar nenhuma linha, identificar uma linha diferente ou identificar mais de uma linha. Para mais informações, veja Construindo Declarações Pesquisadas, mais adiante neste apêndice.

Instruções de atualização e exclusão posicionadas estão sujeitas às seguintes restrições:

  • Instruções de atualização e exclusão posicionadas só podem ser usadas nos seguintes casos: quando uma instrução SELECT gerou o conjunto de resultados; quando a instrução SELECT não continha uma junção, uma cláusula UNION ou uma cláusula GROUP BY ; e quando quaisquer colunas que usavam um alias ou expressão na lista select não estavam vinculadas ao SQLBindCol.

  • Se uma aplicação preparar uma instrução de atualização ou exclusão posicionada, ela deve fazê-lo após chamar SQLFetch ou SQLFetchScroll. Embora a biblioteca de cursores envie a instrução ao driver para preparação, ela fecha a instrução e a executa diretamente quando a aplicação chama SQLExecute.

  • Se o driver suportar apenas uma instrução ativa, a biblioteca de cursores recupera o restante do conjunto de resultados e então recupera o conjunto de linhas atual de seu cache antes de executar uma atualização ou declaração delete posicionada. Se o aplicativo então chamar uma função que retorna metadados em um conjunto de resultados (por exemplo, SQLNumResultCols ou SQLDescribeCol), a biblioteca de cursores retorna um erro.

  • Se uma instrução de atualização ou exclusão posicionada for realizada em uma coluna de uma tabela que inclui uma coluna de carimbo de tempo que é automaticamente atualizada toda vez que uma atualização é realizada, todas as instruções de atualização ou exclusão posicionadas subsequentes falharão se a coluna de carimbo de tempo estiver vinculada. Isso ocorre porque a instrução de atualização ou exclusão pesquisada criada pela biblioteca de cursores não identifica com precisão a linha a ser atualizada. O valor na instrução pesquisada para a coluna de carimbo de tempo não corresponderá ao valor atualizado automaticamente da coluna de carimbo de tempo.