Tengo una tabla de pedidos que tiene una columna de cantidad. Durante el check in o el check out, necesitamos actualizar esa columna de Cantidad en una. ¿Hay alguna manera de hacer esto en una acción o tenemos que obtener el valor existente y luego agregar o menos uno encima?
Otra pregunta es cuando insertamos una nueva fila, ¿necesitamos verificar si existen los mismos datos y luego insertar si no, que son dos pasos, o hay una mejor manera de hacer esto?
Gracias,
La respuesta de un solo paso a la primera pregunta es usar algo como:
Es una forma de hacerlo con una sola instrucción.
En cuanto a la segunda pregunta, no debería necesitar recurrir a gimnasia SQL específica de DBMS (como
UPSERT
) para obtener el resultado que desea. Existe un método estándar para actualizar o insertar que no requiere un DBMS específico.Es decir, intentas hacer la creación primero. Si ya está allí, ignore el error. De lo contrario, lo crea con un valor 0.
Luego haga la actualización que funcionará correctamente si o no:
No es una sola instrucción y, sin embargo, sorprendentemente, así es como lo hemos estado haciendo con éxito durante mucho tiempo.
fuente
Si mi entendimiento es correcto, las actualizaciones deberían ser bastante simples. Solo haría lo siguiente.
Es posible que necesite filtros adicionales para actualizar una sola fila en lugar de todas las filas.
Para las inserciones, puede almacenar en caché alguna identificación única relacionada con su registro localmente y compararla con esta caché y decidir si insertar o no. El enfoque alternativo es siempre insertar y verificar el error de violación de PK e ignorarlo, ya que se trata de una inserción redundante.
fuente
Hasta donde yo sé, no hay soporte integrado para INSERT-OR-UPDATE en SQL. Sugiero crear un procedimiento almacenado o usar una consulta condicional para lograr esto. Aquí puede encontrar una colección de soluciones para diferentes bases de datos.
fuente
para responder al segundo:
haga que la columna sea única y capture la excepción si se establece en el mismo valor.
fuente
@dotjoe Es más barato actualizar y verificar @@ rowcount, hacer una inserción después del hecho.
Las excepciones son caras && las actualizaciones son más frecuentes
Sugerencia: si desea tener un rendimiento superior en su DAL, haga que el front-end pase en una ID única para que la fila se actualice, si es nula, inserte.
Los DAL deben ser CRUD y no deben preocuparse por ser apátridas.
Si lo hace sin estado, con buenos índices, no verá una diferencia con la siguiente declaración SQL vs 1. SI (seleccione la parte superior 1 * formulario x donde PK = @ ID) Inserte otra actualización
fuente