Cómo utilizar actualizar, eliminar, e insertar sentencias sql

Además de SELECCIONAR declaraciones, ACTUALIZAR, BORRAR, y INSERTAR sentencias SQL también pueden incluir DÓNDE cláusulas. Aquellos DÓNDE cláusulas pueden contener subconsultas de la misma manera que SELECCIONAR declaracionesDÓNDE cláusulas hacen.

Por ejemplo, Zetec acaba de hacer un acuerdo de compra con el volumen de ventas Olímpicos y quiere ofrecer olímpico con un crédito retroactivo del 10 por ciento de todas sus compras en el último mes. Se puede dar este crédito con una ACTUALIZAR declaración:

ACTUALIZACIÓN TRANSMASTERSET NetAmount = NetAmount * Fecha de Venta 0.9WHERE gt; (CurrentDate - 30) DÍA Y CustID = (SELECT CustIDFROM CUSTOMERWHERE Empresa = `Ventas Olímpico`) -

Usted también puede tener una subconsulta correlacionada en una ACTUALIZAR declaración. Supongamos que la tabla cliente tiene una columna LastMonthsMax, y Zetec quiere dar un crédito de este tipo para las compras que superen LastMonthsMax para el cliente:

ACTUALIZACIÓN Transmaster TMSET NetAmount = NetAmount * 0.9WHERE NetAmountgt; (SELECCIONAR CLIENTE LastMonthsMaxFROM CWHERE C.CustID = TM.CustID) -

Tenga en cuenta que este sub consulta se correlaciona: La DÓNDE cláusula en las últimas referencias de línea tanto de la CustID de la fila cliente de la sub consulta y la CustID de la fila Transmaster corriente que es un candidato para la actualización.

Video: Insertar, modificar, eliminar y buscar datos en C#

Una subconsulta en una ACTUALIZAR declaración también puede hacer referencia a la tabla que se está actualizando. Supongamos que Zetec quiere dar un crédito de 10 por ciento a los clientes cuyas compras han superado los $ 10.000:

ACTUALIZACIÓN Transmaster TM1SET NetAmount = NetAmount * 0.9WHERE 10000 lt; (SELECT SUM (NetAmount) a partir de Transmaster TM2WHERE TM1.CustID = TM2.CustID) -

La subconsulta interior calcula la SUMA del Importe neto columna para todas las filas Transmaster para el mismo cliente. ¿Qué significa esto? Supongamos que el cliente CustID = 37 tiene cuatro filas en Transmaster con valores para Importe neto: 3000, 5000, 2000, y 1000. los SUMA de Importe neto para esto CustID es 11000.

El orden en que la ACTUALIZAR declaración procesa las filas se define por su aplicación y por lo general no es predecible. El orden puede ser diferente dependiendo de cómo las filas están dispuestas en el disco. Supongamos que la aplicación procesa las filas de este CustID en este orden: primero el Transmaster con una Importe neto de 3000, entonces el uno con Importe neto= 5000, y así.

Después de las tres primeras filas de CustID 37 se han actualizado, su Importe neto Los valores son 2700 (90 por ciento de $ 3,000), 4500 (90 por ciento de $ 5.000), y 1800 (90 por ciento de $ 2,000). Entonces, al procesar la última fila de Transmaster CustID 37 (cuyo Importe neto es 1000), el SUMA devuelta por la subconsulta parecer ser 10000, y el viejo Importe neto valor de la última fila de CustID 37.

Así, parecería que la última fila de CustID 37 no se actualiza, ya que la comparación con la SUMA No es verdad - después de todo, 10000 no es menor de 10000. Pero no es así como la ACTUALIZAR declaración se define cuando una subconsulta hace referencia a la tabla que se está actualizando.

Todas evaluaciones de subconsultas en una ACTUALIZAR Referencia Estados los viejos valores de la mesa- los que se van a actualizar. En el precedente ACTUALIZAR para CustID 37, retorna la subconsulta 11000 - el original SUMA.

La subconsulta en una DÓNDE cláusula opera de la misma como una SELECCIONAR declaración o una ACTUALIZAR declaración. Lo mismo es cierto para BORRAR y INSERTAR. Para eliminar todas las transacciones de Olímpicos, utilice esta declaración:

CANCELACIÓN de TRANSMASTERWHERE CustID = (SELECT CustIDFROM CUSTOMERWHERE Empresa = `Ventas Olímpico`) -

Al igual que con ACTUALIZAR, BORRAR subconsultas también pueden ser correlacionados y también puede hacer referencia a la tabla que se está eliminado. Las reglas son similares a las normas de ACTUALIZAR subconsultas. Suponga que desea eliminar todas las filas de Transmaster para los clientes cuyos totales Importe neto es mayor que $ 10.000:

DELETE FROM Transmaster TM1WHERE 10000 lt; (SELECT SUM (NetAmount) a partir de Transmaster TM2WHERE TM1.CustID = TM2.CustID) -

Esta consulta elimina todas las filas de Transmaster que tienen CustID 37, así como cualquier otro cliente con compras superiores a $ 10.000. Todas las referencias a Transmaster en la sub consulta denotan el contenido de Transmaster antes de cualquier eliminaciones por el estado de cuenta actual. Así que incluso cuando se está borrando la última fila de Transmaster CustID 37, la subconsulta se evalúa sobre la mesa Transmaster original y vuelve 11000.

Al actualizar, eliminar o insertar registros de bases de datos, corre el riesgo de hacer que los datos de una tabla incompatibles con otras tablas de la base de datos. Tal inconsistencia se llama una anomal modificacióny. Si elimina los registros Transmaster y una mesa TRANSDETAIL depende de Transmaster, debe eliminar los registros correspondientes de TRANSDETAIL, también.

Esta operación se llama eliminación en cascada, debido a la eliminación de un registro padre debe conectar en cascada a sus registros secundarios asociados. De lo contrario, los registros secundarios no eliminados se convierten en huérfanos. En este caso, serían las líneas de detalle de factura que se encuentran en el limbo porque ya no están conectados a un registro de factura.

Video: Clase Insertar, modificar, eliminar y buscar datos en VB.net y SQL Server - Parte 1

Si su aplicación de SQL no admite eliminaciones en cascada, debe hacer las supresiones usted mismo. En este caso, elimine los registros apropiados de la tabla secundaria antes de eliminar el registro correspondiente de la matriz. De esta manera, usted no tiene registros huérfanos en la tabla secundaria, ni siquiera por un segundo.

Artículos Relacionados