SQL Server 데이터베이스를 완전히 비울 스크립트를 작성하려고합니다. 이것이 지금까지 내가 가진 것입니다.
USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
Management Studio에서 실행하면 다음과 같은 이점이 있습니다.
명령이 성공적으로 완료되었습니다.
그러나 테이블 목록을 새로 고치면 모두 그대로 있습니다. 내가 뭘 잘못하고 있죠?
답변
외래 키 테이블이 여러 개인 경우에는 작동하지 않습니다.
나는 작동하고 시도하는 모든 것을 수행하는 코드를 발견했습니다 (데이터베이스에서 모든 테이블을 삭제하십시오).
DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR
SET @Cursor = CURSOR FAST_FORWARD FOR
SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.TABLE_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
Exec sp_executesql @Sql
FETCH NEXT FROM @Cursor INTO @Sql
END
CLOSE @Cursor DEALLOCATE @Cursor
GO
EXEC sp_MSforeachtable 'DROP TABLE ?'
GO
여기 에서 게시물을 찾을 수 있습니다 . Groker의 글입니다.
답변
SQL 스크립트를 사용하지 않고 MSSMS UI 도구 만 사용하여 데이터베이스에서 모든 테이블을 삭제할 수도 있습니다. 때로는이 방법이 더 편안 할 수 있습니다 (특히 가끔 수행하는 경우)
다음과 같이 단계별로이 작업을 수행합니다.
- 데이터베이스 트리에서 ‘테이블’을 선택하십시오 (오브젝트 탐색기).
- F7을 눌러 오브젝트 탐색기 세부 사항보기를여십시오.
- 이보기에서 삭제해야하는 테이블을 선택하십시오 (이 경우 모두).
- 모든 테이블이 삭제 될 때까지 Delete 키를 계속 누르십시오 (키 제한 조건 / 종속성으로 인해 많은 양의 오류가 반복됨)
답변
SSMS에서 :
- 데이터베이스를 마우스 오른쪽 버튼으로 클릭하십시오
- “작업”으로 이동
- “스크립트 생성”을 클릭하십시오
- “개체 선택”섹션에서 “전체 데이터베이스 및 모든 데이터베이스 개체 스크립트”를 선택하십시오.
- “스크립팅 옵션 설정”섹션에서 “고급”버튼을 클릭하십시오.
- “Script DROP and CREATE”에서 “Script CREATE”를 “Script DROP”으로 전환하고 OK를 누릅니다.
- 그런 다음 파일, 클립 보드 또는 새 쿼리 창에 저장하십시오.
- 스크립트를 실행하십시오.
이제 데이터베이스를 포함한 모든 것이 삭제됩니다. 떨어 뜨리고 싶지 않은 항목의 코드를 제거하십시오. 또는 “객체 선택”섹션에서 전체 데이터베이스를 스크립팅하도록 선택하는 대신 제거 할 항목을 선택하십시오.
답변
delete
테이블에서 행을 삭제하는 데 사용됩니다. drop table
대신 사용해야 합니다.
EXEC sp_msforeachtable 'drop table [?]'
답변
허용되는 답변은 Azure를 지원하지 않습니다. 문서화되지 않은 저장 프로 시저 “sp_MSforeachtable”을 사용합니다. 실행 중 “azure에서 저장 프로 시저 ‘sp_msforeachtable”을 찾을 수 없거나 오류가 발생하거나 문서화되지 않은 기능에 의존하지 않으려면 (언제든지 제거하거나 기능을 변경할 수 있음) 아래에서 시도하십시오.
이 버전은 엔티티 프레임 워크 마이그레이션 히스토리 테이블 “__MigrationHistory”및 삭제할 권한이없는 Azure 테이블 인 “database_firewall_rules”를 무시합니다.
Azure에서 가볍게 테스트했습니다. 이것이 환경에 바람직하지 않은 영향을 미치지 않도록 확인하십시오.
DECLARE @sql NVARCHAR(2000)
WHILE(EXISTS(SELECT 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY'))
BEGIN
SELECT TOP 1 @sql=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
EXEC(@sql)
PRINT @sql
END
WHILE(EXISTS(SELECT * from INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != '__MigrationHistory' AND TABLE_NAME != 'database_firewall_rules'))
BEGIN
SELECT TOP 1 @sql=('DROP TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME != '__MigrationHistory' AND TABLE_NAME != 'database_firewall_rules'
EXEC(@sql)
PRINT @sql
END
에서 가져온 :
https://edspencer.me.uk/2013/02/25/drop-all-tables-in-a-sql-server-database-azure-friendly/
http://www.sqlservercentral.com/blogs/sqlservertips/2011/10/11/remove-all-foreign-keys/
답변
/* 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
답변
거의 옳았습니다. 대신 사용하십시오.
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DROP TABLE ?'
그러나 두 번째 줄은 오류가 발생하지 않을 때까지 한 번 이상 실행해야 할 수도 있습니다.
Could not drop object 'dbo.table' because it is referenced by a FOREIGN KEY constraint.
메시지:
Command(s) completed successfully.
모든 테이블이 성공적으로 삭제되었음을 의미합니다.