[SQL] 하나의 SQL 문에 모든 테이블, 저장 프로 시저, 트리거, 제약 및 모든 종속성을 드롭
SQL하나의 SQL 문에 모든 테이블, 저장 프로 시저, 트리거, 제약 및 모든 종속성을 드롭
나는 하나의 SQL 문에서, 트리거, 제약 및 모든 종속성을 모든 테이블을 삭제하고 저장 프로 시저를 삭제하여 2005 SQL Server의 데이터베이스를 청소 할 수있는 방법이 있습니까?
요청 이유 :
나는 당신이 그것을 완수하기 위해 잠시 동안 DB 관리자와 대기에 요청에 넣어야 할 때 특히 사용하기보다는 새로운 것을 창조가 아닌 기존 DB를 정리에 대한 DB 스크립트를 갖고 싶어!
해결법
-
==============================
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.나는 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.그것을 할 수있는 가장 좋은 것은 "드롭에 대한 스크립트를 생성합니다"입니다
그것을 할 수있는 가장 좋은 것은 "드롭에 대한 스크립트를 생성합니다"입니다
데이터베이스 선택 -> 오른쪽 클릭 -> 작업 -> 스크립트를 생성 - 스크립트를 생성 마법사가 열립니다
세트 스크립팅 옵션의 개체를 선택한 후 고급 버튼을 클릭합니다
이 방법으로 우리는 우리의 스크립트를 사용자 정의 할 수 있습니다.
-
==============================
4.모든 테이블을 삭제하려면 :
모든 테이블을 삭제하려면 :
exec sp_MSforeachtable 'DROP TABLE ?'
이것은 물론, 모든 제약 조건, 트리거 등 모든하지만, 저장 프로 시저를 삭제합니다.
난 두려워 저장 프로 시저를 들어 당신은 마스터에 저장된 다른 저장 프로 시저가 필요합니다.
-
==============================
5.나는 두 문장에서 그것을 할 것 : DROP 데이터베이스를 ???
나는 두 문장에서 그것을 할 것 : DROP 데이터베이스를 ???
다음 데이터베이스를 만들 ???
-
==============================
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.완전히 빈 데이터베이스를 백업합니다. 대신 모든 개체를 삭제의 바로 백업을 복원합니다.
완전히 빈 데이터베이스를 백업합니다. 대신 모든 개체를 삭제의 바로 백업을 복원합니다.
-
==============================
8.이것은 내가 시도 것입니다 :
이것은 내가 시도 것입니다 :
SELECT 'DROP TABLE [' + SCHEMA_NAME(schema_id) + '].[' + name + ']' FROM sys.tables
무엇 이제까지는 인쇄됩니다 출력, 그냥 모두 복사하고 새 쿼리를 눌러 실행에 붙여 넣습니다. 이것은 모든 테이블을 삭제합니다.
-
==============================
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.이 시도
이 시도
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.@ 이반의 대답에 더하여, 유형 모든 필요를 포함 할
@ 이반의 대답에 더하여, 유형 모든 필요를 포함 할
/* 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.먼저 모든 트리거 및 제약 조건을 해제해야합니다.
먼저 모든 트리거 및 제약 조건을 해제해야합니다.
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.나에게 오히려 위험한 기능처럼 보인다. 이 같은 것을 구현하고 싶다면 내가 제대로이 사고 당 실행할 수 없습니다 방식으로 고정해야합니다 것입니다.
나에게 오히려 위험한 기능처럼 보인다. 이 같은 것을 구현하고 싶다면 내가 제대로이 사고 당 실행할 수 없습니다 방식으로 고정해야합니다 것입니다.
당신이 저장 프로 시저 자신의 어떤 종류를 만들 수 전에 제안한다. SQL Server 2005에서는 당신은 모양을 결정하고 드롭하고자하는 객체를 찾기 위해이 시스템 테이블을 가질 수 있습니다.
select * from sys.objects
-
==============================
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.제가 스크립트에 이것을 추가 한 그래서 이반의 대답에 추가하려면, 나는 또한, 모든 사용자 정의 유형을 드롭 할 필요가 있었다 :
제가 스크립트에 이것을 추가 한 그래서 이반의 대답에 추가하려면, 나는 또한, 모든 사용자 정의 유형을 드롭 할 필요가 있었다 :
/* 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.이 목표를 달성하는 데 사용할 수있는 단 하나의 문이 없다.
이 목표를 달성하는 데 사용할 수있는 단 하나의 문이 없다.
당신은 물론 자신에게 이러한 다양한 관리 작업을 수행하는 데 사용할 수있는 저장 프로 시저를 만들 수 있습니다.
그런 다음이 하나의 문을 사용하여 프로 시저를 실행할 수 있습니다.
Exec sp_CleanDatabases @DatabaseName='DBname'
-
==============================
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.오라클의 모든 개체를 제거하려면 :
오라클의 모든 개체를 제거하려면 :
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.위의 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.이 시도....
이 시도....
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
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
'SQL' 카테고리의 다른 글
[SQL] 실생활의 예를 들어, 때 OUTER / CROSS는 SQL에 적용 사용 (0) | 2020.04.02 |
---|---|
[SQL] SQL 데이터베이스 설계에 대한 초보자 가이드 [마감] (0) | 2020.04.02 |
[SQL] SQL 문을 오류 : "열 ... 존재하지 않습니다" (0) | 2020.04.02 |
[SQL] 누구나 사용 오른쪽 외부 조인합니까? (0) | 2020.04.02 |
[SQL] MS Access에서 데이터를 회전식 (0) | 2020.04.02 |