• RSS
  • Facebook
  • Twitter
  • Linkedin
  • Google +
  • Youtube

Es común que para realizar algunas pruebas sobre Base de Datos hagamos una réplica de la misma y la vaciemos de datos. El problema viene cuando tenemos una base de datos pesada, con muchas tablas y datos, y nos toca o bien lanzar un script de creación de tablas vacías (que en ocasiones no respeta claves ajenas, indices, etc…) o bien hacer truncates a mano.

Os compartimos un script en TSQL para SQL SERVER 2005 que recorre las tablas de una base de datos, elimina las restricciones (para que no falle al borrar datos de una tabla relacionada con otra), hace un truncate de la tabla y vuelve a restablecer las restricciones tal cual estaban.

Hosting Windows ASP.NET

EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
GO</p>
<p style="padding-left: 30px;">EXEC sp_MSForEachTable
'BEGIN TRY
TRUNCATE TABLE ?
END TRY
BEGIN CATCH
DELETE FROM ?
END CATCH;'</p>
<p style="padding-left: 30px;">EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
GO

De este modo tendríamos la tabla vacía de datos pero respetando su estructura, restricciones, relaciones, vistas, procedimientos almacenados… etc. ¡Esperamos que os sea útil!

The following two tabs change content below.
Empresa de Hosting & IT Consulting

Latest posts by Domitienda (see all)

Categorías: tutorial

10 Responses so far.

  1. Sindy dice:

    Excelente Script!!! Muchas Gracias.
    Es Muy util.

  2. pepe dice:

    Pues no funciona en todos los casos..

    DELETE failed because the following SET options have incorrect settings: ‘QUOTED_IDENTIFIER’. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or query notifications and/or xml data type methods.

    Tengan cuidado cuendo lo ejecuten….

  3. angelfer dice:

    Me gusta mejor esto, esta mas controlado, ojala les sirva de algo

    SELECT TABLE_NAME
    INTO #TEMP_TABLE
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE = ‘BASE TABLE’
    AND TABLE_CATALOG=’IAASA-BD’ 0
    BEGIN
    SELECT TOP 1 @NombreTabla = TABLE_NAME FROM #TEMP_TABLE
    EXEC (‘DELETE ‘ + @NombreTabla)
    DELETE #TEMP_TABLE WHERE TABLE_NAME = @NombreTabla
    END
    PRINT ‘Proceso de borrado completado…’;

    DROP TABLE #TEMP_TABLE

  4. angelfer dice:

    Ojo no se subieron todas las lineas, este debe de estar completo

    SELECT TABLE_NAME
    INTO #TEMP_TABLE
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE = ‘BASE TABLE’
    AND TABLE_CATALOG=’IAASA-BD’

    DECLARE @NombreTabla NVARCHAR(30)
    WHILE (SELECT Count(*) FROM #TEMP_TABLE) > 0
    BEGIN
    SELECT TOP 1 @NombreTabla = TABLE_NAME FROM #TEMP_TABLE
    EXEC (‘DELETE ‘ + @NombreTabla)
    DELETE #TEMP_TABLE WHERE TABLE_NAME = @NombreTabla
    END
    PRINT ‘Proceso de borrado completado…’;

    DROP TABLE #TEMP_TABLE

  5. JLee86 dice:

    a mi me funciono la primera sin problemas

  6. Pablo Chavez dice:

    A mi también me funciona la primera sin problemas 🙂

  7. Francisco dice:

    A mi también la primera me funcionó a la perfección, en SQL Server 2005.

  8. EDUARD TORRES dice:

    AMBAS FUNCIONAN PERFECTO, GRACIAS A TODOS

  9. Jorge Salas Escobar dice:

    Excelente, Muchas Gracias!!!

  10. Rafael dice:

    Como agregarias que excluya ciertas tablas?

Deja un comentario