SQLShack

Este artículo sobre el SQL Delete forma parte de la serie SQL essential sobre sentencias, funciones y operaciones clave en SQL Server.

Eliminar una fila de una tabla se realiza a través de una sentencia de Lenguaje de Manipulación de Datos, también conocida como DML, utilizando la palabra clave delete. La operación de borrado de SQL es, con mucho, la más sencilla de todos los comandos DML. Al ejecutar el comando delete, no tenemos que preocuparnos de obtener ninguna forma de datos de la tabla, y no tenemos que preocuparnos de trabajar con los datos que obtenemos de la tabla(s). Simplemente le decimos a la base de datos que borre un registro específico, y lo hace o no lo hace. Es así de sencillo.

  • Nota: Para saber más sobre cómo utilizar la sentencia SQL Delete, lea el artículo Las mejores formas de utilizar la sentencia SQL Delete en una tabla SQL.

  • En primer lugar, revisemos rápidamente cómo es una sentencia SQL delete. Tenemos que decirle a la base de datos y a la tabla de dónde debe eliminar los datos. Es una buena idea añadir una cláusula de condición para establecer el alcance del borrado de datos. De lo contrario, borrará todo lo que haya en la tabla.

    Vamos a ver nuestra tabla y a eliminar algunos registros.

    Cómo eliminar filas sin cláusula where

    El siguiente ejemplo elimina todas las filas de la tabla Person.Person en la base de datos AdventureWorks2014. No hay ninguna restricción impuesta en la sentencia SQL de borrado utilizando una cláusula WHERE.

    .

    1

    .

    2
    3

    USE Adventureworks2014;
    GO
    DELETE FROM .;

    Cómo eliminar filas con la cláusula where

    El siguiente ejemplo elimina filas de la tabla . tabla de la base de datos AdventureWorks2014 en las que el valor de la columna businessEntityID es mayor que 30,000

    1
    2
    3
    4

    Usa Adventureworks2014;
    GO
    DELETE FROM .
    WHERE businessEntityID > 30000;

    Nota: Un error desafortunado que puede ocurrir es ejecutar accidentalmente un SQL Delete sin cláusula Where y eliminar inadvertidamente todos sus datos. Para evitar que esto suceda, considere el uso de la función de guardia de ejecución en ApexSQL Complete, para advertir contra tales acciones potencialmente dañinas, antes de ejecutarlas. Más información: Alertas de ejecución

    Cómo eliminar filas utilizando Top con cláusula where

    El siguiente ejemplo elimina 50 filas aleatorias de la tabla Person.Person en la base de datos AdventureWorks2014. El valor del BusinessEntityID debe estar entre 30.000 y 40,000

    1
    2
    3
    4

    Usa Adventureworks2014;
    GO
    DELETE TOP(50) FROM .
    WHERE BusinessEntityID entre 30000 y 40000

    Nota: La cláusula TOP (n) cuando se utiliza con la sentencia SQL Delete y cualquier sentencia DML (es decir. Select, Insert, Delete y Update), la operación se realiza sobre una selección aleatoria de un número de filas especificado en la cláusula Top.

    Cómo eliminar filas duplicadas

    En el mundo real, tendemos a recopilar datos de diferentes fuentes; no es raro tener registros duplicados. Una aproximación al problema de los duplicados es, en primer lugar, identificar dónde se han producido. Y ejecutar una consulta select en esas columnas.

    El siguiente ejemplo utiliza el argumento PARTITION BY para particionar el conjunto de resultados de la consulta por todas las columnas de la tabla tb_spaceused. La función Row_Number (), es una función ventana, lo que significa que opera sobre un conjunto ordenado. La cláusula ORDER BY especificada en la cláusula OVER ordena las filas de cada partición por todas las columnas de la tabla tb_spaceused.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    CON CTE
    AS (SELECT *,
    ROW_NUMBER() OVER(PARTITION BY database_name,
    database_size,
    ,
    reserved,
    datos,
    tamaño_de_índice,
    sin usar
    Ordenar por nombre_de_base_de_datos
    ) AS Row_Num
    FROM tb_spaceused)
    SELECT *
    FROM CTE
    WHERE Row_Num <> 1;

    Sustituir la sentencia Select por una Delete elimina todos los duplicados de la tabla.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    WITH CTE
    AS (SELECT *,
    ROW_NUMBER() OVER(PARTITION BY database_name,
    database_size,
    ,
    reserved,
    datos,
    tamaño_de_índice,
    sin usar
    Ordenar por nombre_de_base_de_datos
    ) AS Row_Num
    FROM tb_spaceused)
    –SELECT *
    –FROM CTE
    –WHERE Row_Num <> 1;
    DELETE FROM CTE
    WHERE Row_Num <> 1;

    Cómo eliminar filas mediante subconsultas SQL-consultas

    En el siguiente ejemplo, las filas de una tabla se eliminan en función de los datos de otra tabla. En los ejemplos, las filas de la tabla SalesPersonQuotaHistory se eliminan basándose en la columna SalesYTD de la tabla SalesPerson.

    1
    2
    3
    4
    5
    6
    7

    DELETE FROM Sales.SalesPersonQuotaHistory
    WHERE BusinessEntityID IN
    (
    SELECT BusinessEntityID
    FROM Sales.SalesPerson
    WHERE SalesYTD > 4900000.00
    );
    GO

    Cómo eliminar filas utilizando SQL Joins

    En este apartado, utilizaremos la sentencia SQL Delete para eliminar los datos de la base de datos Adeventureworks2014. Eliminar datos, a primera vista, suena trivial, pero una vez que nos metemos en un diseño de base de datos grande las cosas pueden dejar de ser iguales y fáciles.

    En muchos casos, las tablas están relacionadas a través de una relación de clave primaria y foránea. En el siguiente ejemplo, podemos ver un uso de joins para borrar los datos de la tabla Sales.SalesPersonQuotaHistory.

    1
    2
    3
    4
    5

    DELETE sq
    FROM Sales.SalesPersonQuotaHistory sq
    INNER JOIN Sales.SalesPerson sp ON sq.BusinessEntityID = sp.BusinessEntityID
    WHERE sp.SalesYTD > 4500000.00;
    GO

    Cómo eliminar filas de una tabla remota utilizando servidores vinculados y OpenQuery

    El siguiente ejemplo utiliza la sentencia SQL delete para eliminar filas de una tabla remota utilizando el servidor vinculado llamado, hqdbt01. A continuación, consulta la tabla remota utilizando la convención de nomenclatura de objetos de cuatropartes para eliminar las filas de la tabla remota

    1
    2
    3

    DELETE
    FROM .AdventureWorks2014..
    Donde ShiftID = 2;

    El siguiente ejemplo, la tabla remota se consulta especificando la función OPENQUERY rowset junto con el comando delete.

    1
    2
    3

    DELETE OPENQUERY (hqdbt01, ‘SELECT *
    FROM AdventureWorks2014.HumanResources.Department
    WHERE DepartmentID = 18′);

    Cómo eliminar filas utilizando SSMS

    El uso de SQL Server Management Studio (SSMS), Graphical User Interface (GUI) para eliminar filas implica una búsqueda manual. En realidad, será mucho más fácil y rápido eliminar registros con una consulta SQL.

    Vamos a localizar la tabla para utilizar una sentencia SQL de borrado, en este caso, se selecciona la tabla dbo.ciudades. Ahora, hacemos clic con el botón derecho del ratón y elegimos Editar las 200 primeras filas. Esta opción abre una ventana de diseño de consultas. A continuación, haga clic con el botón derecho del ratón en la ventana y seleccione Ejecutar SQL y escriba una nueva consulta que elimine filas de la tabla dbo.cities.

    En el panel de resultados, asegúrese de que la sentencia SELECT está sacando los registros correctos de destino antes de empezar a eliminar filas. Seleccione las filas y haga clic con el botón derecho en las filas y elija Eliminar para eliminar las filas de la tabla.

    Resumen

    Hasta ahora, hemos visto muchas formas diferentes de utilizar la sentencia SQL delete para eliminar datos. Pero, hay una lista de las consideraciones a seguir mientras se utiliza la sentencia delete, y es como sigue:

    1. Siempre se recomienda comenzar con una sentencia SELECT antes de eliminar algo para asegurarse de que está apuntando a los registros correctos. Así que la sentencia delete se utiliza para eliminar filas de una tabla utilizando la cláusula where para seleccionar sólo las filas que se van a eliminar
    2. Utiliza siempre un identificador único para localizar las filas que necesitas eliminar
    3. Para eliminar todas las filas de una tabla, utiliza siempre TRUNCATE TABLE. TRUNCATE TABLE que es más rápido que una sentencia SQL delete y utiliza menos recursos del sistema y del registro de transacciones
    4. Por defecto, las sentencias DELETE inducen un bloqueo exclusivo (X) en la tabla, y mantiene el bloqueo hasta que la transacción se completa
    5. Un bloqueo exclusivo impide que otra transacción modifique los datos; las operaciones de lectura se permiten con el uso de la pista NOLOCK o el nivel de aislamiento de lectura no comprometida
    6. Se recomienda especificar la pista TABLOCK en la sentencia delete. Este proceso permite la desasignación de páginas y el espacio asociado disponible para su reutilización por otros objetos de la base de datos
    7. Es una buena práctica crear un índice agrupado en la tabla del montón antes de ejecutar una sentencia delete
    8. Aunque es muy simple y muy potente, y el resultado de una sentencia Delete es destructivo. Las filas eliminadas no pueden ser recuperadas fácilmente
    9. Nota: Para recuperar las filas eliminadas vea Recuperación de desastres de SQL Server – Cómo recuperar rápidamente los datos perdidos debido a una operación de eliminación involuntaria

      Eso es todo por ahora… Espero que disfrute de la lectura de este artículo sobre la sentencia SQL delete. Si tienes alguna pregunta, no dudes en comentar abajo.

      • Autor
      • Postes recientes

      Soy un tecnólogo de Bases de Datos que tiene 11+ años de rica, experiencia práctica en tecnologías de bases de datos. Soy un profesional certificado por Microsoft y respaldado por un título de máster en aplicaciones informáticas.
      Mi especialidad es el diseño de & soluciones de alta disponibilidad y migración de bases de datos multiplataforma. Las tecnologías en las que actualmente trabajo son SQL Server, PowerShell, Oracle y MongoDB.
      Ver todos los posts de Prashanth Jayaram

      Los últimos posts de Prashanth Jayaram (ver todos)
      • Una rápida visión de la auditoría de bases de datos en SQL – 28 de enero, 2021
      • Cómo configurar Azure Data Sync entre las bases de datos de Azure SQL y SQL Server local – 20 de enero
      • Cómo realizar operaciones de importación/exportación de bases de datos de Azure SQL mediante PowerShell – 14 de enero

      .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *