Pregunta

Quiero ejecutar el comando UPDATE sobre un grupo de registros, pero falla, porque algunos registros después de la actualización violarían una restricción de la tabla. ¿Es posible actualizar solo los registros adecuados de alguna manera?

¿Fue útil?

Solución

Comportamiento de la actualización ya que todo o nada es por diseño

Puedes agregar cláusulas Where a tu comando de actualización para verificar todas las restricciones, pero esto resulta en una duplicación de código, no es algo bueno

¿Qué tal hacer la actualización una fila a la vez usando un Cursor o un bucle CLR?

Si esto es parte de una aplicación multicapa, entonces es donde los objetos de su negocio necesitan conocer sus restricciones de SQL a través de metadatos o interrogación de esquemas para que la validación de datos pueda realizarse antes de que llegue a la base de datos

El CSLA framework tiene algunas ventajas para esto

Otros consejos

La declaración de actualización es en sí misma atómica, tendrá éxito o fallará. Debe modificar el SQL para actualizar solo las filas donde no se violará la restricción.

Debe agregar las restricciones a la cláusula WHERE.

O eso o ejecuta la actualización por separado para cada línea, pero esto no parece una buena idea en absoluto.

Para agregar a algunas de las respuestas ya publicadas: es posible que deba usar una subconsulta en la cláusula where. Me gusta (en psuedo-code)

update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)

Si publica un código, es posible que pueda ayudarle más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top