Atualizando dados em cursores do SQL Server
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
Ao buscar e atualizar dados por meio de cursores do SQL Server, um aplicativo de consumidor do Driver do OLE DB para SQL Server é limitado pelas 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 OLE DB Driver for SQL Server usa o nível de isolamento de leitura confirmada especificado por DBPROPVAL_TI_READCOMMITTED. O Driver do OLE DB para SQL Server 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.
Ao usar IRowsetUpdate::Update, o Driver do OLE DB para SQL Server tenta processar cada linha indicada. Um erro que ocorre devido a valores de status, tamanho ou dados inválidos para qualquer linha não interrompe o processamento do OLE DB Driver for SQL Server. É possível modificar todas ou nenhuma das outras linhas que participam da atualização. O consumidor precisa examinar a matriz prgRowStatus retornada para determinar a falha de qualquer linha específica quando o OLE DB Driver for SQL Server retorna 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.