Borrar datos en Transact SQL
Delete
Para borrar datos de una tabla debemos utilizar la sentencia DELETE.
Para ejecutar los ejemplos de este capitulo debemos ejecutar el siguiente script, que crea la tabla "DATOS" y carga registros en ella.
CREATE
TABLE DATOS( Id int identity not null,dato varchar(100),fx_alta datetime,constraint PK_DATOS PRIMARY KEY (Id)) GO DECLARE @i int, @dato varchar(100)set @i = 0WHILE (@i <100)BEGIN SET @i = @i +1set @dato = 'Dato:' + cast(@i as varchar)INSERT INTO DATOS (dato, fx_alta)VALUES (@dato, getdate())END GO SELECT * from DATOS
|
Para borrar los registros de la tabla "DATOS" ejecutaremos la siguiente instrucción. Notese que no se especifica ninguna condición WHERE por lo que se borran todos los datos de la tabla.
Lógicamente podemos especicar que registros queremos borrar a través de la clausula WHERE.
DELETE FROM DATOS WHERE Id=12
|
Cuando borramos datos de una tabla, podemos obtener el número de filas que han sido afectadas por la instrucción a través de la variable @@RowCount.
El siguiente ejemplo ilustra el uso de @@RowCount.
DELETE FROM DATOS WHERE Id=17 SELECT @@ROWCOUNT
|
Clausula OUTPUT
A partir de la version de SQL Server 2005 disponemos de la clausula OUTPUT para recuperar los valores que hemos insertado. Al igual que en un trigger disponemos de las tablas lógicas INSERTED y DELETED.
Las columnas con prefijo DELETED reflejan el valor antes de que se complete la instrucción UPDATE o DELETE. Es decir, son una copia de los datos "antes" del cambio.
DELETED no se puede utilizar con la cláusula OUTPUT en la instrucción INSERT.
DECLARE @FILAS_BORRADAS TABLE( Id int,dato varchar(100),fx_alta datetime
) DELETE FROM DATOSOUTPUT DELETED.* INTO @FILAS_BORRADASWHERE Id=17 SELECT * from @FILAS_BORRADAS |
Truncate Table
Para borrar datos de forma masiva disponemos de la instrucción TRUNCATE TABLE, que borra todos los datos de una tabla.
Cuando trabajamos con TRUNCATE TABLE debemos tener en cuenta las siguientes consideraciones: