복붙노트

[SQL] SQL Server 데이터베이스에있는 모든 데이터를 삭제

SQL

SQL Server 데이터베이스에있는 모든 데이터를 삭제

어떻게 내 데이터베이스의 모든 테이블에서 모든 레코드를 삭제할 수 있습니까? 나는 하나의 SQL 명령으로 그것을 아니면 하나 개의 테이블 당 하나의 SQL 명령에 필요한 수 있습니까?

해결법

  1. ==============================

    1.SQLMenace의 솔루션은 데이터를 삭제하는 방법에 약간의 비틀기와 나를 위해 일한 - DELETE 대신 TRUNCATE의 FROM.

    SQLMenace의 솔루션은 데이터를 삭제하는 방법에 약간의 비틀기와 나를 위해 일한 - DELETE 대신 TRUNCATE의 FROM.

    -- disable referential integrity
    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
    GO 
    
    EXEC sp_MSForEachTable 'DELETE FROM ?' 
    GO 
    
    -- enable referential integrity again 
    EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL' 
    GO
    
  2. ==============================

    2.보통 난 그냥 문서화되지 않은 시저를 사용합니다 sp_MSForEachTable

    보통 난 그냥 문서화되지 않은 시저를 사용합니다 sp_MSForEachTable

    -- disable referential integrity
    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
    GO 
    
    EXEC sp_MSForEachTable 'TRUNCATE TABLE ?' 
    GO 
    
    -- enable referential integrity again 
    EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 
    GO
    

    참조 : (당신이 FKS있을 때) 데이터베이스에있는 모든 데이터를 삭제

  3. ==============================

    3.

    /* Drop all non-system stored procs */
    DECLARE @name VARCHAR(128)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])
    
    WHILE @name is not null
    BEGIN
        SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'
        EXEC (@SQL)
        PRINT 'Dropped Procedure: ' + @name
        SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] > @name ORDER BY [name])
    END
    GO
    
    /* Drop all views */
    DECLARE @name VARCHAR(128)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])
    
    WHILE @name IS NOT NULL
    BEGIN
        SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'
        EXEC (@SQL)
        PRINT 'Dropped View: ' + @name
        SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] > @name ORDER BY [name])
    END
    GO
    
    /* Drop all functions */
    DECLARE @name VARCHAR(128)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])
    
    WHILE @name IS NOT NULL
    BEGIN
        SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'
        EXEC (@SQL)
        PRINT 'Dropped Function: ' + @name
        SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] > @name ORDER BY [name])
    END
    GO
    
    /* Drop all Foreign Key constraints */
    DECLARE @name VARCHAR(128)
    DECLARE @constraint VARCHAR(254)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
    
    WHILE @name is not null
    BEGIN
        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
        WHILE @constraint IS NOT NULL
        BEGIN
            SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']'
            EXEC (@SQL)
            PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name
            SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
        END
    SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
    END
    GO
    
    /* Drop all Primary Key constraints */
    DECLARE @name VARCHAR(128)
    DECLARE @constraint VARCHAR(254)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
    
    WHILE @name IS NOT NULL
    BEGIN
        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
        WHILE @constraint is not null
        BEGIN
            SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint)+']'
            EXEC (@SQL)
            PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name
            SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
        END
    SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
    END
    GO
    
    /* Drop all tables */
    DECLARE @name VARCHAR(128)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])
    
    WHILE @name IS NOT NULL
    BEGIN
        SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
        EXEC (@SQL)
        PRINT 'Dropped Table: ' + @name
        SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
    END
    GO
    
  4. ==============================

    4.나는이 늦게 알고 있어요,하지만 난 오히려 테이블에서 데이터를 퍼지의 번거 로움을 통해가는 것보다, 스크립트 AlexKuznetsov의 제안 데이터베이스에 동의합니다. 자르는 솔루션을하지 작업, 그리고 많은 양의 데이터가 일어날 경우, 발행 DELETE 문은 시간이 오래 걸릴 수 있습니다 (로그인), 당신은 (시드되지 않은 식별자로, 즉 INSERT 문에 남아있을거야 ID 열이있는 테이블은 당신에게 50000의 ID 대신에 하나의 ID)를 얻을 것입니다.

    나는이 늦게 알고 있어요,하지만 난 오히려 테이블에서 데이터를 퍼지의 번거 로움을 통해가는 것보다, 스크립트 AlexKuznetsov의 제안 데이터베이스에 동의합니다. 자르는 솔루션을하지 작업, 그리고 많은 양의 데이터가 일어날 경우, 발행 DELETE 문은 시간이 오래 걸릴 수 있습니다 (로그인), 당신은 (시드되지 않은 식별자로, 즉 INSERT 문에 남아있을거야 ID 열이있는 테이블은 당신에게 50000의 ID 대신에 하나의 ID)를 얻을 것입니다.

    스크립트 SSMS에서 전체 데이터베이스에, 작업을 선택한 다음, 데이터베이스를 마우스 오른쪽 버튼으로 클릭 -> 스크립트를 생성합니다 :

    마법사 시작 화면을 건너 뛰고 다음 스크립트로 원하는 오브젝트를 선택하려면 다음을 클릭합니다 :

    설정 스크립트 옵션 화면에서, 당신은 모든 개별 개체의 개체 또는 별도의 스크립트를 한 스크립트를 생성 할 것인지와 같은 스크립팅에 대한 설정을 선택할 수 있으며, 유니 코드 또는 ANSI 파일을 저장할지 여부를 :

    마법사는 '마침'을 클릭하여 당신이 원하는대로 모든 것이 확인하는 데 사용할 수있는 요약, 닫기를 표시합니다.

  5. ==============================

    5.이 스크립트는 적절한 순서에 DELETE 문을 생성합니다. 다음 참조 테이블을 참조하는 것부터 시작

    이 스크립트는 적절한 순서에 DELETE 문을 생성합니다. 다음 참조 테이블을 참조하는 것부터 시작

  6. ==============================

    6.이 데이터베이스의 모든 개체에서 훨씬 빠르게 스크립트 보통이며, 또는 잘라 내기 테이블을 삭제하는 것으로, 빈 만듭니다.

    이 데이터베이스의 모든 개체에서 훨씬 빠르게 스크립트 보통이며, 또는 잘라 내기 테이블을 삭제하는 것으로, 빈 만듭니다.

  7. ==============================

    7.내가 SQL Server 데이터베이스에서 모든 데이터를 제거하는 데 사용하는 스크립트 아래

    내가 SQL Server 데이터베이스에서 모든 데이터를 제거하는 데 사용하는 스크립트 아래

    ------------------------------------------------------------
    /* Use database */ 
    -------------------------------------------------------------
    
    use somedatabase;
    
    GO
    
    ------------------------------------------------------------------
    /* Script to delete an repopulate the base [init database] */
    ------------------------------------------------------------------
    
    -------------------------------------------------------------
    /* Procedure delete all constraints */ 
    -------------------------------------------------------------
    
    IF EXISTS (SELECT name  
               FROM  sysobjects 
               WHERE name = 'sp_DeleteAllConstraints' AND type = 'P')
        DROP PROCEDURE dbo.sp_DeleteAllConstraints
    GO
    
    CREATE PROCEDURE sp_DeleteAllConstraints
    AS
        EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
        EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
    GO
    
    -----------------------------------------------------
    /* Procedure delete all data from the database */ 
    -----------------------------------------------------
    
    IF EXISTS (SELECT name  
               FROM  sysobjects 
               WHERE name = 'sp_DeleteAllData' AND type = 'P')
        DROP PROCEDURE dbo.sp_DeleteAllData
    GO
    
    CREATE PROCEDURE sp_DeleteAllData
    AS
        EXEC sp_MSForEachTable 'DELETE FROM ?'
    GO
    
    -----------------------------------------------
    /* Procedure enable all constraints */ 
    -----------------------------------------------
    
    IF EXISTS (SELECT name  
               FROM  sysobjects 
               WHERE name = 'sp_EnableAllConstraints' AND type = 'P')
        DROP PROCEDURE dbo.sp_EnableAllConstraints
    GO
    -- ....
    -- ....
    -- ....
    
  8. ==============================

    8.

    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
    
    EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
    
    EXEC sp_MSForEachTable 'DELETE FROM ?'
    
    EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
    
    EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
    
    EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
    
    GO
    
  9. ==============================

    9.다른 대답으로, 당신의 Visual Studio SSDT 또는 가능성이 레드 게이트는 SQL 비교하면, 당신은 단순히 당신이해야한다는 이유가 될 경우에 가능 (기존 데이터베이스를 삭제 먼저 백업을 스크립트 그것을 밖으로, 스키마 비교를 실행할 수 있습니다 데이터가), 후 비교 도구에 의해 생성 된 스크립트를 사용하여 새 데이터베이스를 만듭니다. 아주 작은 데이터베이스에이 더 많은 작업을 할 수 있지만, 매우 큰 데이터베이스에 훨씬 더 빨리 간단하게하는 것입니다 데이터베이스에있을 수있는 다른 트리거와 제약 조건으로 거래에 다음 데이터베이스를 놓습니다.

    다른 대답으로, 당신의 Visual Studio SSDT 또는 가능성이 레드 게이트는 SQL 비교하면, 당신은 단순히 당신이해야한다는 이유가 될 경우에 가능 (기존 데이터베이스를 삭제 먼저 백업을 스크립트 그것을 밖으로, 스키마 비교를 실행할 수 있습니다 데이터가), 후 비교 도구에 의해 생성 된 스크립트를 사용하여 새 데이터베이스를 만듭니다. 아주 작은 데이터베이스에이 더 많은 작업을 할 수 있지만, 매우 큰 데이터베이스에 훨씬 더 빨리 간단하게하는 것입니다 데이터베이스에있을 수있는 다른 트리거와 제약 조건으로 거래에 다음 데이터베이스를 놓습니다.

  10. ==============================

    10.네, 단 한 줄의 코드로 삭제할 수 있습니다

    네, 단 한 줄의 코드로 삭제할 수 있습니다

    SELECT 'TRUNCATE TABLE ' + d.NAME + ';' 
    FROM   sys.tables d 
    WHERE  type = 'U' 
    
  11. from https://stackoverflow.com/questions/3687575/delete-all-data-in-sql-server-database by cc-by-sa and MIT license