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 dá suporte a instruções de atualização e exclusão posicionadas 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 associada. A biblioteca de cursores passa as instruções UPDATE e DELETE recém-construídas para o driver para execução. Para instruções de atualização posicionadas, a biblioteca de cursores atualiza seu cache dos valores nos buffers do conjunto de linhas e define o valor correspondente na matriz de status da linha como SQL_ROW_UPDATED. Para instruções de exclusão posicionadas, ela define o valor correspondente na matriz de status da linha como SQL_ROW_DELETED.
Cuidado
A cláusula WHERE construída pela biblioteca de cursores para identificar a linha atual pode falhar ao identificar quaisquer linhas, identificar uma linha diferente ou identificar mais de uma linha. Para obter mais informações, consulte Construindo instruções pesquisadas, posteriormente neste apêndice.
As 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 todas as colunas que usaram um alias ou expressão na lista de seleção não foram associadas a SQLBindCol.
Se um aplicativo preparar uma instrução de atualização ou exclusão posicionada, ele deverá fazer isso depois de 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 o aplicativo chama SQLExecute.
Se o driver der suporte a apenas uma instrução ativa, a biblioteca de cursores buscará o restante do conjunto de resultados e, em seguida, buscará novamente o conjunto de linhas atual de seu cache antes de executar uma instrução de atualização ou exclusão posicionada. Se o aplicativo chamar uma função que retorna metadados em um conjunto de resultados (por exemplo, SQLNumResultCols ou SQLDescribeCol), a biblioteca de cursores retornará um erro.
Se uma instrução de atualização ou exclusão posicionada for executada em uma coluna de uma tabela que inclui uma coluna de carimbo de data/hora que é atualizada automaticamente sempre que uma atualização for executada, todas as instruções subsequentes posicionadas de atualização ou exclusão falharão se a coluna de carimbo de data/hora estiver associada. Isso ocorre porque a instrução de atualização ou exclusão pesquisada que a biblioteca de cursores cria não identificará com precisão a linha a ser atualizada. O valor na instrução pesquisada para a coluna de carimbo de data/hora não corresponderá ao valor atualizado automaticamente da coluna de carimbo de data/hora.