[SQL] 이름이 특정 문자열로 시작하는 모든 테이블을 삭제
SQL이름이 특정 문자열로 시작하는 모든 테이블을 삭제
어떻게 이름이 주어진 문자열로 시작하는 모든 테이블을 드롭 할 수 있습니까?
나는이 일부 동적 SQL 및 INFORMATION_SCHEMA 테이블을 함께 할 수 있다고 생각합니다.
해결법
-
==============================
1.당신은 데이터베이스에 하나 이상있을 경우 소유자를 포함하도록 쿼리를 수정해야 할 수도 있습니다.
당신은 데이터베이스에 하나 이상있을 경우 소유자를 포함하도록 쿼리를 수정해야 할 수도 있습니다.
DECLARE @cmd varchar(4000) DECLARE cmds CURSOR FOR SELECT 'drop table [' + Table_Name + ']' FROM INFORMATION_SCHEMA.TABLES WHERE Table_Name LIKE 'prefix%' OPEN cmds WHILE 1 = 1 BEGIN FETCH cmds INTO @cmd IF @@fetch_status != 0 BREAK EXEC(@cmd) END CLOSE cmds; DEALLOCATE cmds
이 스크립트 플러스 실행을 생성의 두 단계 접근 방식을 사용하는 것보다 청소기입니다. 그러나 스크립트 생성 중 하나 장점은 당신이 실제로 실행되기 전에 실행해야 무슨 일이 일어나고 있는지의 전체를 검토 할 수있는 기회를 제공한다는 것입니다.
나는 프로덕션 데이터베이스에 대해이 작업을 수행하려고한다면, 나는 가능한 한 조심 같이있을 거라고 알고 있습니다.
편집 코드 샘플은 고정.
-
==============================
2.
SELECT 'DROP TABLE "' + TABLE_NAME + '"' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '[prefix]%'
이 스크립트를 생성합니다.
삭제하기 전에 테이블의 체크 존재에 절을 추가 :
SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '[prefix]%'
-
==============================
3.이렇게하면 외래 키 순서로 테이블을 얻을 SQL 서버에 의해 생성 된 테이블의 일부를 떨어 뜨리지 않도록합니다. t.Ordinal 값 종속 층에 표를 슬라이스한다.
이렇게하면 외래 키 순서로 테이블을 얻을 SQL 서버에 의해 생성 된 테이블의 일부를 떨어 뜨리지 않도록합니다. t.Ordinal 값 종속 층에 표를 슬라이스한다.
WITH TablesCTE(SchemaName, TableName, TableID, Ordinal) AS ( SELECT OBJECT_SCHEMA_NAME(so.object_id) AS SchemaName, OBJECT_NAME(so.object_id) AS TableName, so.object_id AS TableID, 0 AS Ordinal FROM sys.objects AS so WHERE so.type = 'U' AND so.is_ms_Shipped = 0 AND OBJECT_NAME(so.object_id) LIKE 'MyPrefix%' UNION ALL SELECT OBJECT_SCHEMA_NAME(so.object_id) AS SchemaName, OBJECT_NAME(so.object_id) AS TableName, so.object_id AS TableID, tt.Ordinal + 1 AS Ordinal FROM sys.objects AS so INNER JOIN sys.foreign_keys AS f ON f.parent_object_id = so.object_id AND f.parent_object_id != f.referenced_object_id INNER JOIN TablesCTE AS tt ON f.referenced_object_id = tt.TableID WHERE so.type = 'U' AND so.is_ms_Shipped = 0 AND OBJECT_NAME(so.object_id) LIKE 'MyPrefix%' ) SELECT DISTINCT t.Ordinal, t.SchemaName, t.TableName, t.TableID FROM TablesCTE AS t INNER JOIN ( SELECT itt.SchemaName AS SchemaName, itt.TableName AS TableName, itt.TableID AS TableID, Max(itt.Ordinal) AS Ordinal FROM TablesCTE AS itt GROUP BY itt.SchemaName, itt.TableName, itt.TableID ) AS tt ON t.TableID = tt.TableID AND t.Ordinal = tt.Ordinal ORDER BY t.Ordinal DESC, t.TableName ASC
-
==============================
4.오라클 XE에이 작동합니다 :
오라클 XE에이 작동합니다 :
SELECT 'DROP TABLE "' || TABLE_NAME || '";' FROM USER_TABLES WHERE TABLE_NAME LIKE 'YOURTABLEPREFIX%'
당신은뿐만 아니라 공간의 제약을 제거하고 확보하려는 경우 또는이를 사용 :
SELECT 'DROP TABLE "' || TABLE_NAME || '" cascade constraints PURGE;' FROM USER_TABLES WHERE TABLE_NAME LIKE 'YOURTABLEPREFIX%'
어떤 DROP TABLE 캐스케이드 제약 퍼지 문의 무리를 생성합니다 ...
뷰에 대한이를 사용 :
SELECT 'DROP VIEW "' || VIEW_NAME || '";' FROM USER_VIEWS WHERE VIEW_NAME LIKE 'YOURVIEWPREFIX%'
-
==============================
5.여기 내 솔루션입니다 :
여기 내 솔루션입니다 :
SELECT CONCAT('DROP TABLE `', TABLE_NAME,'`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'TABLE_PREFIX_GOES_HERE%';
물론 당신은 당신의 접두어로 TABLE_PREFIX_GOES_HERE를 교체해야합니다.
-
==============================
6.
EXEC sp_MSforeachtable 'if PARSENAME("?",1) like ''%CertainString%'' DROP TABLE ?'
편집하다:
그것의 행동이 MS_SQL 버전에 따라 달라질 수 있기 때문에 sp_MSforeachtable, 따라서 생산에 적합하지 문서화되어있다.
-
==============================
7.
CREATE PROCEDURE usp_GenerateDROP @Pattern AS varchar(255) ,@PrintQuery AS bit ,@ExecQuery AS bit AS BEGIN DECLARE @sql AS varchar(max) SELECT @sql = COALESCE(@sql, '') + 'DROP TABLE [' + TABLE_NAME + ']' + CHAR(13) + CHAR(10) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE @Pattern IF @PrintQuery = 1 PRINT @sql IF @ExecQuery = 1 EXEC (@sql) END
-
==============================
8.나는 여기에 내가 결국 무슨 짓을 내가 @Xenph 연의를 기반으로 모든 워드 프레스 테이블을 드롭 MySQL의 문을 찾고 있었어요이 게시물을 보았다 :
나는 여기에 내가 결국 무슨 짓을 내가 @Xenph 연의를 기반으로 모든 워드 프레스 테이블을 드롭 MySQL의 문을 찾고 있었어요이 게시물을 보았다 :
SELECT CONCAT( 'DROP TABLE `', TABLE_NAME, '`;' ) AS query FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'wp_%'
모든 테이블에 대해 당신에게 드롭 쿼리의 집합을 줄 것이다이 wp_ 시작
-
==============================
9.Xenph 얀의 대답은 훨씬 청소기 나보다했지만 여기에 광산은 모두 동일합니다.
Xenph 얀의 대답은 훨씬 청소기 나보다했지만 여기에 광산은 모두 동일합니다.
DECLARE @startStr AS Varchar (20) SET @startStr = 'tableName' DECLARE @startStrLen AS int SELECT @startStrLen = LEN(@startStr) SELECT 'DROP TABLE ' + name FROM sysobjects WHERE type = 'U' AND LEFT(name, @startStrLen) = @startStr
당신이 검색하려는 문자에 그냥 변경 테이블의 이름입니다.
-
==============================
10.이것은 나를 위해 일했다.
이것은 나를 위해 일했다.
DECLARE @sql NVARCHAR(MAX) = N''; SELECT @sql += ' DROP TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ';' FROM sys.tables AS t INNER JOIN sys.schemas AS s ON t.[schema_id] = s.[schema_id] WHERE t.name LIKE 'something%'; PRINT @sql; -- EXEC sp_executesql @sql;
-
==============================
11.
select 'DROP TABLE ' + name from sysobjects where type = 'U' and sysobjects.name like '%test%'
- 테스트 테이블의 이름입니다
-
==============================
12.
SELECT 'if object_id(''' + TABLE_NAME + ''') is not null begin drop table "' + TABLE_NAME + '" end;' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '[prefix]%'
-
==============================
13.나는 기본 스키마에 테이블을하지했기 때문에 나는 의심 Xenph 얀의 대답에 약간의 유도를해야했다.
나는 기본 스키마에 테이블을하지했기 때문에 나는 의심 Xenph 얀의 대답에 약간의 유도를해야했다.
SELECT 'DROP TABLE Databasename.schema.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'strmatch%'
-
==============================
14.임시 테이블의 경우, 당신은 시도 할 수도
임시 테이블의 경우, 당신은 시도 할 수도
SELECT 'DROP TABLE "' + t.name + '"' FROM tempdb.sys.tables t WHERE t.name LIKE '[prefix]%'
from https://stackoverflow.com/questions/4393/drop-all-tables-whose-names-begin-with-a-certain-string by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 (C #을 클라이언트)의 데이터를 많이 삽입 대량 가장 빠른 방법은 무엇입니까 (0) | 2020.04.30 |
---|---|
[SQL] 무엇을 포함 않습니다 () LINQ에서합니까? (0) | 2020.04.29 |
[SQL] 어떻게 MySQL은 DATETIME에서 일부 날짜와 시간에 (0) | 2020.04.29 |
[SQL] 어떻게 특정 문자까지 오라클 SQL에서 문자열을 선택하려면? (0) | 2020.04.29 |
[SQL] 또 다른 하나 개의 테이블 일치 조건에서 선택? (0) | 2020.04.29 |