복붙노트

[SQL] 하나의 SQL 문에 모든 테이블, 저장 프로 시저, 트리거, 제약 및 모든 종속성을 드롭

SQL

하나의 SQL 문에 모든 테이블, 저장 프로 시저, 트리거, 제약 및 모든 종속성을 드롭

나는 하나의 SQL 문에서, 트리거, 제약 및 모든 종속성을 모든 테이블을 삭제하고 저장 프로 시저를 삭제하여 2005 SQL Server의 데이터베이스를 청소 할 수있는 방법이 있습니까?

요청 이유 :

나는 당신이 그것을 완수하기 위해 잠시 동안 DB 관리자와 대기에 요청에 넣어야 할 때 특히 사용하기보다는 새로운 것을 창조가 아닌 기존 DB를 정리에 대한 DB 스크립트를 갖고 싶어!

해결법

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

    1.이 스크립트는 모든 뷰, SPS, 기능 PK와, FKS와 테이블을 정리합니다.

    이 스크립트는 모든 뷰, SPS, 기능 PK와, FKS와 테이블을 정리합니다.

    /* 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
    
  2. ==============================

    2.나는 dbo가 아닌 다른 스키마에있는 객체를 지원하도록 업데이트, 아담 앤더슨이 스크립트를 사용하고 있습니다.

    나는 dbo가 아닌 다른 스키마에있는 객체를 지원하도록 업데이트, 아담 앤더슨이 스크립트를 사용하고 있습니다.

    declare @n char(1)
    set @n = char(10)
    
    declare @stmt nvarchar(max)
    
    -- procedures
    select @stmt = isnull( @stmt + @n, '' ) +
        'drop procedure [' + schema_name(schema_id) + '].[' + name + ']'
    from sys.procedures
    
    
    -- check constraints
    select @stmt = isnull( @stmt + @n, '' ) +
    'alter table [' + schema_name(schema_id) + '].[' + object_name( parent_object_id ) + ']    drop constraint [' + name + ']'
    from sys.check_constraints
    
    -- functions
    select @stmt = isnull( @stmt + @n, '' ) +
        'drop function [' + schema_name(schema_id) + '].[' + name + ']'
    from sys.objects
    where type in ( 'FN', 'IF', 'TF' )
    
    -- views
    select @stmt = isnull( @stmt + @n, '' ) +
        'drop view [' + schema_name(schema_id) + '].[' + name + ']'
    from sys.views
    
    -- foreign keys
    select @stmt = isnull( @stmt + @n, '' ) +
        'alter table [' + schema_name(schema_id) + '].[' + object_name( parent_object_id ) + '] drop constraint [' + name + ']'
    from sys.foreign_keys
    
    -- tables
    select @stmt = isnull( @stmt + @n, '' ) +
        'drop table [' + schema_name(schema_id) + '].[' + name + ']'
    from sys.tables
    
    -- user defined types
    select @stmt = isnull( @stmt + @n, '' ) +
        'drop type [' + schema_name(schema_id) + '].[' + name + ']'
    from sys.types
    where is_user_defined = 1
    
    
    exec sp_executesql @stmt
    

    출처 : 아담 앤더슨 블로그 게시물

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

    3.그것을 할 수있는 가장 좋은 것은 "드롭에 대한 스크립트를 생성합니다"입니다

    그것을 할 수있는 가장 좋은 것은 "드롭에 대한 스크립트를 생성합니다"입니다

    데이터베이스 선택 -> 오른쪽 클릭 -> 작업 -> 스크립트를 생성 - 스크립트를 생성 마법사가 열립니다

    세트 스크립팅 옵션의 개체를 선택한 후 고급 버튼을 클릭합니다

    이 방법으로 우리는 우리의 스크립트를 사용자 정의 할 수 있습니다.

  4. ==============================

    4.모든 테이블을 삭제하려면 :

    모든 테이블을 삭제하려면 :

    exec sp_MSforeachtable 'DROP TABLE ?'
    

    이것은 물론, 모든 제약 조건, 트리거 등 모든하지만, 저장 프로 시저를 삭제합니다.

    난 두려워 저장 프로 시저를 들어 당신은 마스터에 저장된 다른 저장 프로 시저가 필요합니다.

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

    5.나는 두 문장에서 그것을 할 것 : DROP 데이터베이스를 ???

    나는 두 문장에서 그것을 할 것 : DROP 데이터베이스를 ???

    다음 데이터베이스를 만들 ???

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

    6.여기 스크립트의 일부를했지만, 내가 스키마 내 테이블을 가지고 그들은 나를 위해 작동하지 않았다. 그래서 함께 다음을 넣어. 이 스크립트는 스키마 목록을 받아, 순서대로 다음 삭제합니다. 당신은 당신의 스키마에 완전한 순서를 가지고 있는지 확인해야합니다. 어떤 순환 종속성이있는 경우, 그것은 실패합니다.

    여기 스크립트의 일부를했지만, 내가 스키마 내 테이블을 가지고 그들은 나를 위해 작동하지 않았다. 그래서 함께 다음을 넣어. 이 스크립트는 스키마 목록을 받아, 순서대로 다음 삭제합니다. 당신은 당신의 스키마에 완전한 순서를 가지고 있는지 확인해야합니다. 어떤 순환 종속성이있는 경우, 그것은 실패합니다.

    PRINT 'Dropping whole database'
    GO
    
    ------------------------------------------
    -- Drop constraints
    ------------------------------------------
    DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR
    
    SET @Cursor = CURSOR FAST_FORWARD FOR
    SELECT DISTINCT sql = 'ALTER TABLE ['+tc2.CONSTRAINT_SCHEMA+'].[' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']'
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1
    LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME =rc1.CONSTRAINT_NAME
    
    OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql
    
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
    PRINT @Sql
    Exec (@Sql)
    FETCH NEXT FROM @Cursor INTO @Sql
    END
    
    CLOSE @Cursor DEALLOCATE @Cursor
    GO
    
    
    ------------------------------------------
    -- Drop views
    ------------------------------------------
    
    DECLARE @sql VARCHAR(MAX) = ''
            , @crlf VARCHAR(2) = CHAR(13) + CHAR(10) ;
    
    SELECT @sql = @sql + 'DROP VIEW ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(v.name) +';' + @crlf
    FROM   sys.views v
    
    PRINT @sql;
    EXEC(@sql);
    GO
    ------------------------------------------
    -- Drop procs
    ------------------------------------------
    PRINT 'Dropping all procs ...'
    GO
    
    DECLARE @sql VARCHAR(MAX) = ''
            , @crlf VARCHAR(2) = CHAR(13) + CHAR(10) ;
    
    SELECT @sql = @sql + 'DROP PROC ' + QUOTENAME(SCHEMA_NAME(p.schema_id)) + '.' + QUOTENAME(p.name) +';' + @crlf
    FROM   [sys].[procedures] p
    
    PRINT @sql;
    EXEC(@sql);
    GO
    
    ------------------------------------------
    -- Drop tables
    ------------------------------------------
    PRINT 'Dropping all tables ...'
    GO
    EXEC sp_MSForEachTable 'DROP TABLE ?'
    GO
    
    ------------------------------------------
    -- Drop sequences
    ------------------------------------------
    
    PRINT 'Dropping all sequences ...'
    GO
    DECLARE @DropSeqSql varchar(1024)
    DECLARE DropSeqCursor CURSOR FOR
    SELECT DISTINCT 'DROP SEQUENCE ' + s.SEQUENCE_SCHEMA + '.' + s.SEQUENCE_NAME
        FROM INFORMATION_SCHEMA.SEQUENCES s
    
    OPEN DropSeqCursor
    
    FETCH NEXT FROM DropSeqCursor INTO @DropSeqSql
    
    WHILE ( @@FETCH_STATUS <> -1 )
    BEGIN
        PRINT @DropSeqSql
        EXECUTE( @DropSeqSql )
        FETCH NEXT FROM DropSeqCursor INTO @DropSeqSql
    END
    
    CLOSE DropSeqCursor
    DEALLOCATE DropSeqCursor
    GO
    
    ------------------------------------------
    -- Drop Schemas
    ------------------------------------------
    
    
    DECLARE @schemas as varchar(1000) = 'StaticData,Ird,DataImport,Collateral,Report,Cds,CommonTrade,MarketData,TypeCode'
    DECLARE @schemasXml as xml = cast(('<schema>'+replace(@schemas,',' ,'</schema><schema>')+'</schema>') as xml)
    
    DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR
    
    SET @Cursor = CURSOR FAST_FORWARD FOR
    SELECT sql = 'DROP SCHEMA ['+schemaName+']' FROM 
    (SELECT CAST(T.schemaName.query('text()') as VARCHAR(200)) as schemaName FROM @schemasXml.nodes('/schema') T(schemaName)) as X
    JOIN information_schema.schemata S on S.schema_name = X.schemaName
    
    OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql
    
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
    PRINT @Sql
    Exec (@Sql)
    FETCH NEXT FROM @Cursor INTO @Sql
    END
    
    CLOSE @Cursor DEALLOCATE @Cursor
    GO
    
  7. ==============================

    7.완전히 빈 데이터베이스를 백업합니다. 대신 모든 개체를 삭제의 바로 백업을 복원합니다.

    완전히 빈 데이터베이스를 백업합니다. 대신 모든 개체를 삭제의 바로 백업을 복원합니다.

  8. ==============================

    8.이것은 내가 시도 것입니다 :

    이것은 내가 시도 것입니다 :

    SELECT 'DROP TABLE [' + SCHEMA_NAME(schema_id) + '].[' + name + ']' FROM sys.tables
    

    무엇 이제까지는 인쇄됩니다 출력, 그냥 모두 복사하고 새 쿼리를 눌러 실행에 붙여 넣습니다. 이것은 모든 테이블을 삭제합니다.

  9. ==============================

    9.실수로 내 마스터 데이터베이스 오늘 밤에 대해 DB를 초기화 스크립트를 실행. 어쨌든, 나는 빨리이 스레드에 달렸다. 간부 sp_MSforeachtable 'DROP 표?'나는 사용 대답은하지만, 내가 다른 스레드에 발견하고, 저장 프로 시저 및 함수 모두를 드롭이 서로를 조합해서 그 후 오류 (종속성을.)하지 않았다 때까지 여러 번 실행했다.

    실수로 내 마스터 데이터베이스 오늘 밤에 대해 DB를 초기화 스크립트를 실행. 어쨌든, 나는 빨리이 스레드에 달렸다. 간부 sp_MSforeachtable 'DROP 표?'나는 사용 대답은하지만, 내가 다른 스레드에 발견하고, 저장 프로 시저 및 함수 모두를 드롭이 서로를 조합해서 그 후 오류 (종속성을.)하지 않았다 때까지 여러 번 실행했다.

    DECLARE mycur CURSOR FOR select O.type_desc,schema_id,O.name
    from 
        sys.objects             O LEFT OUTER JOIN
        sys.extended_properties E ON O.object_id = E.major_id
    WHERE
        O.name IS NOT NULL
        AND ISNULL(O.is_ms_shipped, 0) = 0
        AND ISNULL(E.name, '') <> 'microsoft_database_tools_support'
        AND ( O.type_desc = 'SQL_STORED_PROCEDURE' OR O.type_desc = 'SQL_SCALAR_FUNCTION' )
    ORDER BY O.type_desc,O.name;
    
    OPEN mycur;
    
    DECLARE @schema_id int;
    DECLARE @fname varchar(256);
    DECLARE @sname varchar(256);
    DECLARE @ftype varchar(256);
    
    FETCH NEXT FROM mycur INTO @ftype, @schema_id, @fname;
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @sname = SCHEMA_NAME( @schema_id );
        IF @ftype = 'SQL_STORED_PROCEDURE'
            EXEC( 'DROP PROCEDURE "' + @sname + '"."' + @fname + '"' );
        IF @ftype = 'SQL_SCALAR_FUNCTION'
            EXEC( 'DROP FUNCTION "' + @sname + '"."' + @fname + '"' );
    
        FETCH NEXT FROM mycur INTO @ftype, @schema_id, @fname;
    END
    
    CLOSE mycur
    DEALLOCATE mycur
    
    GO
    
  10. ==============================

    10.이 시도

    이 시도

    Select 'ALTER TABLE ' + Table_Name  +'  drop constraint ' + Constraint_Name  from Information_Schema.CONSTRAINT_TABLE_USAGE
    
    Select 'drop Procedure ' + specific_name  from Information_Schema.Routines where specific_name not like 'sp%' AND specific_name not like 'fn_%'
    
    Select 'drop View ' + table_name  from Information_Schema.tables where Table_Type = 'VIEW'
    
    SELECT 'DROP TRIGGER ' + name FROM sysobjects WHERE type = 'tr'
    
    Select 'drop table ' + table_name  from Information_Schema.tables where Table_Type = 'BASE TABLE'
    
  11. ==============================

    11.@ 이반의 대답에 더하여, 유형 모든 필요를 포함 할

    @ 이반의 대답에 더하여, 유형 모든 필요를 포함 할

        /* Drop all Types */
    DECLARE @name VARCHAR(128)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (SELECT TOP 1 [name] FROM sys.types where is_user_defined = 1 ORDER BY [name])
    
    WHILE @name IS NOT NULL
    BEGIN
        SELECT @SQL = 'DROP TYPE [dbo].[' + RTRIM(@name) +']'
        EXEC (@SQL)
        PRINT 'Dropped Type: ' + @name
        SELECT @name = (SELECT TOP 1 [name] FROM sys.types where is_user_defined = 1 AND [name] > @name ORDER BY [name])
    END
    GO
    
  12. ==============================

    12.먼저 모든 트리거 및 제약 조건을 해제해야합니다.

    먼저 모든 트리거 및 제약 조건을 해제해야합니다.

    EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
    
    EXEC sp_MSforeachtable @command1="ALTER TABLE ? DISABLE TRIGGER ALL"
    

    그 후 당신은 개체를 삭제하는 스크립트를 생성 할 수 있습니다

    SELECT 'Drop Table '+name FROM sys.tables WHERE type='U';
    
    SELECT 'Drop Procedure '+name FROM  sys.procedures WHERE type='P';
    

    생성 된 문을 실행합니다.

  13. ==============================

    13.나에게 오히려 위험한 기능처럼 보인다. 이 같은 것을 구현하고 싶다면 내가 제대로이 사고 당 실행할 수 없습니다 방식으로 고정해야합니다 것입니다.

    나에게 오히려 위험한 기능처럼 보인다. 이 같은 것을 구현하고 싶다면 내가 제대로이 사고 당 실행할 수 없습니다 방식으로 고정해야합니다 것입니다.

    당신이 저장 프로 시저 자신의 어떤 종류를 만들 수 전에 제안한다. SQL Server 2005에서는 당신은 모양을 결정하고 드롭하고자하는 객체를 찾기 위해이 시스템 테이블을 가질 수 있습니다.

    select * from sys.objects
    
  14. ==============================

    14.여기에서 나는 모든 SP, 함수 및 트리거를 삭제하는 새 쿼리를 발견

    여기에서 나는 모든 SP, 함수 및 트리거를 삭제하는 새 쿼리를 발견

    declare @procName varchar(500)
    declare cur cursor 
    
    for select [name] from sys.objects where type = 'p'
    open cur
    fetch next from cur into @procName
    while @@fetch_status = 0
    begin
        exec('drop procedure ' + @procName)
        fetch next from cur into @procName
    end
    close cur
    deallocate cur
    
  15. ==============================

    15.제가 스크립트에 이것을 추가 한 그래서 이반의 대답에 추가하려면, 나는 또한, 모든 사용자 정의 유형을 드롭 할 필요가 있었다 :

    제가 스크립트에 이것을 추가 한 그래서 이반의 대답에 추가하려면, 나는 또한, 모든 사용자 정의 유형을 드롭 할 필요가 있었다 :

    /* Drop all user-defined types */
    DECLARE @name VARCHAR(128)
    DECLARE @SQL VARCHAR(254)
    
    SELECT @name = (select TOP 1 [name] from sys.types where is_user_defined = 1)
    
    WHILE @name IS NOT NULL
    BEGIN
        SELECT @SQL = 'DROP TYPE [dbo].[' + RTRIM(@name) +']'
        EXEC (@SQL)
        PRINT 'Dropped Type: ' + @name
        SELECT @name = (select TOP 1 [name] from sys.types where is_user_defined = 1)
    END
    GO
    
  16. ==============================

    16.이 목표를 달성하는 데 사용할 수있는 단 하나의 문이 없다.

    이 목표를 달성하는 데 사용할 수있는 단 하나의 문이 없다.

    당신은 물론 자신에게 이러한 다양한 관리 작업을 수행하는 데 사용할 수있는 저장 프로 시저를 만들 수 있습니다.

    그런 다음이 하나의 문을 사용하여 프로 시저를 실행할 수 있습니다.

    Exec sp_CleanDatabases @DatabaseName='DBname'
    
  17. ==============================

    17.

    DECLARE @name VARCHAR(255)
    DECLARE @type VARCHAR(10)
    DECLARE @prefix VARCHAR(255)
    DECLARE @sql VARCHAR(255)
    
    DECLARE curs CURSOR FOR
    SELECT [name], xtype
    FROM sysobjects
    WHERE xtype IN ('U', 'P', 'FN', 'IF', 'TF', 'V', 'TR') -- Configuration point 1
    ORDER BY name
    
    OPEN curs
    FETCH NEXT FROM curs INTO @name, @type
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
    -- Configuration point 2
    SET @prefix = CASE @type
    WHEN 'U' THEN 'DROP TABLE'
    WHEN 'P' THEN 'DROP PROCEDURE'
    WHEN 'FN' THEN 'DROP FUNCTION'
    WHEN 'IF' THEN 'DROP FUNCTION'
    WHEN 'TF' THEN 'DROP FUNCTION'
    WHEN 'V' THEN 'DROP VIEW'
    WHEN 'TR' THEN 'DROP TRIGGER'
    END
    
    SET @sql = @prefix + ' ' + @name
    PRINT @sql
    EXEC(@sql)
    FETCH NEXT FROM curs INTO @name, @type
    END
    
    CLOSE curs
    DEALLOCATE curs
    
  18. ==============================

    18.오라클의 모든 개체를 제거하려면 :

    오라클의 모든 개체를 제거하려면 :

    1) 동적

    DECLARE
    CURSOR IX IS
    SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE' 
    AND OWNER='SCHEMA_NAME';
     CURSOR IY IS
     SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE 
    IN ('SEQUENCE',
    'PROCEDURE',
    'PACKAGE',
    'FUNCTION',
    'VIEW') AND  OWNER='SCHEMA_NAME';
     CURSOR IZ IS
     SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('TYPE') AND  OWNER='SCHEMA_NAME';
    BEGIN
     FOR X IN IX LOOP
       EXECUTE IMMEDIATE('DROP '||X.OBJECT_TYPE||' '||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
     END LOOP;
     FOR Y IN IY LOOP
       EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' '||Y.OBJECT_NAME);
     END LOOP;
     FOR Z IN IZ LOOP
       EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' '||Z.OBJECT_NAME||' FORCE ');
     END LOOP;
    END;
    /
    

    2) 정적

        SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables
            union ALL
            select 'drop '||object_type||' '|| object_name || ';' from user_objects 
            where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION')
            union ALL
            SELECT 'drop '
            ||object_type
            ||' '
            || object_name
            || ' force;'
            FROM user_objects
            WHERE object_type IN ('TYPE');
    
  19. ==============================

    19.위의 sql2012 또는 이것을 시도,

    위의 sql2012 또는 이것을 시도,

    이 선택한 스키마의 모든 개체를 삭제하는 데 도움이 될 것입니다

    DECLARE @MySchemaName VARCHAR(50)='dbo', @sql VARCHAR(MAX)='';
    DECLARE @SchemaName VARCHAR(255), @ObjectName VARCHAR(255), @ObjectType VARCHAR(255), @ObjectDesc VARCHAR(255), @Category INT;
    
    DECLARE cur CURSOR FOR
        SELECT  (s.name)SchemaName, (o.name)ObjectName, (o.type)ObjectType,(o.type_desc)ObjectDesc,(so.category)Category
        FROM    sys.objects o
        INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
        INNER JOIN sysobjects so ON so.name=o.name
        WHERE s.name = @MySchemaName
        AND so.category=0
        AND o.type IN ('P','PC','U','V','FN','IF','TF','FS','FT','PK','TT')
    
    OPEN cur
    FETCH NEXT FROM cur INTO @SchemaName,@ObjectName,@ObjectType,@ObjectDesc,@Category
    
    SET @sql='';
    WHILE @@FETCH_STATUS = 0 BEGIN    
        IF @ObjectType IN('FN', 'IF', 'TF', 'FS', 'FT') SET @sql=@sql+'Drop Function '+@MySchemaName+'.'+@ObjectName+CHAR(13)
        IF @ObjectType IN('V') SET @sql=@sql+'Drop View '+@MySchemaName+'.'+@ObjectName+CHAR(13)
        IF @ObjectType IN('P') SET @sql=@sql+'Drop Procedure '+@MySchemaName+'.'+@ObjectName+CHAR(13)
        IF @ObjectType IN('U') SET @sql=@sql+'Drop Table '+@MySchemaName+'.'+@ObjectName+CHAR(13)
    
        --PRINT @ObjectName + ' | ' + @ObjectType
        FETCH NEXT FROM cur INTO @SchemaName,@ObjectName,@ObjectType,@ObjectDesc,@Category
    END
    CLOSE cur;    
    DEALLOCATE cur;
    SET @sql=@sql+CASE WHEN LEN(@sql)>0 THEN 'Drop Schema '+@MySchemaName+CHAR(13) ELSE '' END
    PRINT @sql
    EXECUTE (@sql)
    
  20. ==============================

    20.이 시도....

    이 시도....

    USE DATABASE
    GO
    DECLARE @tname VARCHAR(150)
    DECLARE @strsql VARCHAR(300)
    
    SELECT @tname = (SELECT TOP 1 [name] FROM sys.objects WHERE [type] = 'U' and [name] like N'TableName%' ORDER BY [name])
    
    WHILE @tname IS NOT NULL
    BEGIN
        SELECT @strsql = 'DROP TABLE [dbo].[' + RTRIM(@tname) +']'
        EXEC (@strsql)
        PRINT 'Dropped Table : ' + @tname
        SELECT @tname = (SELECT TOP 1 [name] FROM sys.objects WHERE [type] = 'U' AND [name] like N'TableName%'  AND [name] > @tname ORDER BY [name])
    END
    
  21. from https://stackoverflow.com/questions/536350/drop-all-the-tables-stored-procedures-triggers-constraints-and-all-the-depend by cc-by-sa and MIT license