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 = 0

WHILE (@i <100)

BEGIN

SET @i = @i +1

set @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.


DELETE

FROM DATOS

    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 DATOS

OUTPUT DELETED.* INTO @FILAS_BORRADAS

WHERE 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.


TRUNCATE
TABLE DATOS

    Cuando trabajamos con TRUNCATE TABLE debemos tener en cuenta las siguientes consideraciones:

  • TRUNCATE TABLE no admite la clausula WHERE.
  • No podemos ejecutar TRUNCATE TABLE sobre tablas que sean "padres" en foreign keys.

 

Pedro  Herrarte  Sánchez
Borrar datos en Transact SQL
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:16/08/2007
Última actualizacion:16/08/2007
Visitas totales:55014
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com