Alterando dados usando um cursor

As APIs ADO, OLE DB e ODBC oferecem suporte à atualização da linha atual na qual um aplicativo está posicionado em um conjunto de resultados. As etapas seguintes descrevem o processo fundamental:

  1. Associe as colunas do conjunto de resultados para programar variáveis.

  2. Execute a consulta.

  3. Chame funções ou métodos de API para posicionar o aplicativo em uma linha dentro do conjunto de resultados.

  4. Preencha as variáveis de programa associadas com novos valores de dados qualquer coluna a ser atualizada.

  5. Chame uma dessas funções ou métodos para inserir a linha:

    • No ADO, chame o método Update do objetoRecordset.

    • No OLE DB, chame o método SetData da interfaceIRowsetChange.

    • No ODBC, chame a função SQLSetPos com a opção de SQL_UPDATE.

Quando você usar um cursor de servidor Transact-SQL, você pode atualizar a linha atual usando uma instrução UPDATE que inclui uma cláusula WHERE CURRENT OF. As mudanças realizadas com essa cláusula afetam só a linha na qual o cursor é posicionado. Quando um cursor estiver baseado em uma junção, só o table_name especificado na instrução UPDATE é modificado. Outras tabelas que participam do cursor não são afetadas.

USE AdventureWorks;
GO
DECLARE complex_cursor CURSOR FOR
    SELECT a.EmployeeID
    FROM HumanResources.EmployeePayHistory AS a
    WHERE RateChangeDate <> 
         (SELECT MAX(RateChangeDate)
          FROM HumanResources.EmployeePayHistory AS b
          WHERE a.EmployeeID = b.EmployeeID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 2 
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO

Para obter mais informações sobre junções, consulte Conceitos básicos de junção.