Cambiar datos mediante un cursor

Las API de ADO, OLE DB y ODBC admiten la actualización de la fila actual en la que está colocada la aplicación en un conjunto de resultados. Los pasos siguientes describen el proceso básico:

  1. Enlazar las columnas del conjunto de resultados a variables de programa.

  2. Ejecutar la consulta.

  3. Llamar a las funciones o métodos de la API para colocar la aplicación en una fila del conjunto de resultados.

  4. Rellenar las variables enlazadas de programa con los nuevos valores de datos de las columnas que deben actualizarse.

  5. Llamar a una de estas funciones o métodos para insertar la fila:

    • En ADO, llamar al método Update del objeto Recordset.

    • En OLE DB, llamar al método SetData de la interfaz IRowsetChange.

    • En ODBC, llamar a la función SQLSetPos con la opción SQL_UPDATE.

Cuando utilice un cursor de servidor de Transact-SQL, podrá actualizar la fila actual con una instrucción UPDATE que incluya una cláusula WHERE CURRENT OF. Los cambios realizados con esta cláusula afectan sólo a la fila en la que esté situado el cursor. Cuando un cursor se basa en una combinación, sólo se modifica el table_name especificado en la instrucción UPDATE. Las demás tablas que participan en el cursor no se ven afectadas.

USE AdventureWorks2008R2;
GO
DECLARE complex_cursor CURSOR FOR
    SELECT a.BusinessEntityID
    FROM HumanResources.EmployeePayHistory AS a
    WHERE RateChangeDate <> 
         (SELECT MAX(RateChangeDate)
          FROM HumanResources.EmployeePayHistory AS b
          WHERE a.BusinessEntityID = b.BusinessEntityID) ;
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 obtener más información acerca de las combinaciones, vea Aspectos básicos de las combinaciones.