Eliminar filas mediante DELETE
Actualizado: 14 de abril de 2006
La instrucción DELETE quita una o varias filas de una tabla o vista.
A continuación se expone una forma simplificada de la sintaxis de DELETE:
DELETE table_or_view
FROM table_sources
WHERE search_condition
El parámetro table_or_view indica la tabla o vista de la que se van a eliminar las filas. Se eliminarán todas las filas de table_or_view que reúnan los requisitos de la condición de búsqueda de la cláusula WHERE. Si no se especifica ninguna cláusula WHERE, se eliminarán todas las filas de table_or_view. La cláusula FROM especifica tablas o vistas y condiciones de combinación adicionales que los predicados de la condición de búsqueda de la cláusula WHERE pueden utilizar para calificar las filas que se eliminarán de table_or_view.. Las filas no se eliminan de las tablas mencionadas en la cláusula FROM, sólo de la tabla mencionada en table_or_view.
Las tablas de las que se quitan todas las filas permanecen en la base de datos. La instrucción DELETE sólo elimina filas de la tabla, pero la tabla en sí se debe quitar de la base de datos mediante la instrucción DROP TABLE.
Eliminar filas de un montón
Cuando se eliminan filas de un montón, Database Engine (Motor de base de datos) puede usar el bloqueo de fila o de página para la operación. Como resultado, las páginas que pasan a estar vacías debido a la operación de eliminación siguen asignadas al montón. Si no se cancela la asignación de las páginas vacías, otros objetos de la base de datos no pueden volver a utilizar el espacio asociado.
Para eliminar las filas de un montón y cancelar la asignación de las páginas, use uno de los métodos siguientes.
- Especifique la sugerencia TABLOCK en la instrucción DELETE. El uso de la sugerencia TABLOCK hace que la operación de eliminación use un bloqueo compartido de la tabla, en lugar de un bloqueo de fila o de página. Esto permite cancelar la asignación de las páginas. Para obtener más información acerca de la sugerencia TABLOCK, vea Sugerencias de tabla (Transact-SQL).
- Use TRUNCATE TABLE si se van a eliminar todas las filas de la tabla.
- Cree un índice agrupado en el montón antes de eliminar las filas. Puede quitar el índice agrupado después de eliminarlas. Para este método se requiere más tiempo que para los métodos anteriores y usa más recursos temporales.
Para obtener más información acerca del bloqueo, vea Bloquear el motor de base de datos.
Ejemplos
En el ejemplo siguiente se eliminan todas las filas de la tabla SalesPersonQuotaHistory
porque no se utiliza una cláusula WHERE para limitar el número de filas eliminadas.
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory;
GO
En el ejemplo siguiente se eliminan todas las filas de la tabla ProductCostHistory
en las que el valor de la columna StandardCost
es superior a 1000.00
.
USE AdventureWorks;
GO
DELETE FROM Production.ProductCostHistory
WHERE StandardCost > 1000.00;
GO
En este ejemplo se muestra la extensión de Transact-SQL que se utiliza para eliminar registros de una tabla base que se basa en una combinación o subconsulta correlacionada. La primera instrucción DELETE
muestra la solución de subconsulta compatible con SQL-2003 y la segunda instrucción DELETE
muestra la extensión de Transact-SQL. Ambas consultas quitan filas de la tabla SalesPersonQuotaHistory
basándose en las ventas del año hasta la fecha almacenadas en la tabla SalesPerson
.
-- SQL-2003 Standard subquery
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory
WHERE SalesPersonID IN
(SELECT SalesPersonID
FROM Sales.SalesPerson
WHERE SalesYTD > 2500000.00);
GO
-- Transact-SQL extension
USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO
Vea también
Conceptos
Eliminar filas de conjuntos de resultados
Eliminar todas las filas mediante TRUNCATE TABLE
Limitar el número de filas eliminadas mediante TOP
Otros recursos
DROP TABLE (Transact-SQL)
DELETE (Transact-SQL)
Eliminar datos de una tabla
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
14 de abril de 2006 |
|