Compartir vía


Procesamiento de instrucciones posicionadas Update y Delete

Importante

Esta característica se quitará en una versión futura de Windows. Evite usar esta característica en el nuevo trabajo de desarrollo y planee modificar las aplicaciones que actualmente usan esta característica. Microsoft recomienda usar la funcionalidad del cursor del controlador.

La biblioteca de cursores admite instrucciones update y delete posicionadas reemplazando la cláusula WHERE CURRENT OF en estas instrucciones por una cláusula WHERE que enumera los valores almacenados en su memoria caché para cada columna enlazada. La biblioteca de cursores pasa las instrucciones UPDATE y DELETE recién construidas al controlador para su ejecución. Para las instrucciones de actualización posicionadas, la biblioteca de cursores actualiza su memoria caché de los valores de los búferes del conjunto de filas y establece el valor correspondiente en la matriz de estado de fila en SQL_ROW_UPDATED. En el caso de las instrucciones delete posicionadas, establece el valor correspondiente en la matriz de estado de fila en SQL_ROW_DELETED.

Precaución

La cláusula WHERE construida por la biblioteca de cursores para identificar la fila actual puede no identificar las filas, identificar una fila diferente o identificar más de una fila. Para obtener más información, vea Construcción de instrucciones buscadas, más adelante en este apéndice.

Las instrucciones update y delete posicionadas están sujetas a las siguientes restricciones:

  • Las instrucciones update y delete posicionadas solo se pueden usar en los siguientes casos: cuando una instrucción SELECT generó el conjunto de resultados; cuando la instrucción SELECT no contenía una combinación, una cláusula UNION o una cláusula GROUP BY ; y cuando las columnas que usaron un alias o expresión en la lista de selección no estaban enlazadas con SQLBindCol.

  • Si una aplicación prepara una instrucción de actualización o eliminación posicionada, debe hacerlo después de llamar a SQLFetch o SQLFetchScroll. Aunque la biblioteca de cursores envía la instrucción al controlador para su preparación, cierra la instrucción y la ejecuta directamente cuando la aplicación llama a SQLExecute.

  • Si el controlador solo admite una instrucción activa, la biblioteca de cursores captura el resto del conjunto de resultados y, a continuación, vuelve a capturar el conjunto de filas actual de su memoria caché antes de ejecutar una instrucción update o delete posicionada. Si la aplicación llama a una función que devuelve metadatos en un conjunto de resultados (por ejemplo, SQLNumResultCols o SQLDescribeCol), la biblioteca de cursores devuelve un error.

  • Si se realiza una instrucción update o delete posicionada en una columna de una tabla que incluye una columna de marca de tiempo que se actualiza automáticamente cada vez que se realiza una actualización, se producirá un error en todas las instrucciones update o delete posteriores si la columna timestamp está enlazada. Esto ocurre porque la instrucción de actualización o eliminación buscada que crea la biblioteca de cursores no identificará con precisión la fila que se va a actualizar. El valor de la instrucción buscada para la columna timestamp no coincidirá con el valor actualizado automáticamente de la columna timestamp.