Atualizando dados em cursores do SQL Server no SQL Server Native Client
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics
Ao buscar e atualizar dados por meio de cursores do SQL Server, um aplicativo consumidor de provedor OLE DB do SQL Server Native Client é vinculado às mesmas considerações e restrições que se aplicam a qualquer outro aplicativo cliente.
Apenas as linhas em cursores do SQL Server participam do controle de acesso a dados simultâneo. Quando o consumidor solicita um conjunto de linhas modificável, o controle de simultaneidade é controlado por DBPROP_LOCKMODE. Para modificar o nível do controle de acesso simultâneo, o consumidor define a propriedade DBPROP_LOCKMODE antes de abrir o conjunto de linhas.
Os níveis de isolamento da transação podem gerar defasagens significativas no posicionamento de linhas, se o design do aplicativo cliente permitir que as transações permaneçam abertas por longos períodos. Por padrão, o provedor OLE DB do SQL Server Native Client usa o nível de isolamento de leitura confirmada especificado pelo DBPROPVAL_TI_READCOMMITTED. O provedor OLE DB do SQL Server Native Client dá suporte ao isolamento de leitura suja quando a simultaneidade do conjunto de linhas é somente leitura. Assim, o consumidor pode solicitar um nível mais alto de isolamento em um conjunto de linhas modificável, mas não pode solicitar nenhum nível inferior com êxito.
Modos de atualização imediatos e atrasados
No modo de atualização imediato, cada chamada a IRowsetChange::SetData causa uma viagem de ida e volta ao SQL Server. Se o consumidor fizer várias alterações em uma única linha, será mais eficiente enviar todas as alterações com uma única chamada de SetData.
No modo de atualização atrasada, uma viagem de ida e volta é feita ao SQL Server para cada linha indicada nos parâmetros cRows e rghRows de IRowsetUpdate::Update.
Em qualquer modo, uma viagem de ida e volta representará uma transação distinta quando nenhum objeto de transação estiver aberto para o conjunto de linhas.
Quando você está usando IRowsetUpdate::Update, o provedor OLE DB do SQL Server Native Client tenta processar cada linha indicada. Um erro que ocorre devido a valores inválidos de dados, comprimento ou status para qualquer linha não interrompe o processamento do provedor OLE DB do SQL Server Native Client. É possível modificar todas ou nenhuma das outras linhas que participam da atualização. O consumidor deve examinar a matriz prgRowStatus retornada para determinar a falha de qualquer linha específica quando o provedor OLE DB do SQL Server Native Client retornar DB_S_ERRORSOCCURRED.
Um consumidor não deve presumir que as linhas são processadas em qualquer ordem específica. Se um consumidor solicitar o processamento ordenado da modificação de dados em mais de uma única linha, ele deverá estabelecer essa ordem na lógica do aplicativo e abrir uma transação para conter o processo.