ProgramingTip

Microsoft SQL Server에서 데이터베이스 삭제 및 재생성

bestdevel 2020. 12. 14. 20:37
반응형

Microsoft SQL Server에서 데이터베이스 삭제 및 재생성


Microsoft SQL Server 2008 R2 SP1을 실험하고 배우고 있습니다. 많은 실험을 한 데이터베이스가 있습니다. 이제 삭제하고 다시 만들고 싶습니다. 그래서 데이터베이스에서 생성 펼쳐보기를 추출하고 삭제하고 펼쳐서 사용하여 다시 생성합니다. 놀랍게도 모든 테이블, 키 등이 여전히 있습니다. 데이터베이스를 처음부터 다시 사용 데이터베이스를 삭제해야합니까?


USE master
IF EXISTS(select * from sys.databases where name='yourDBname')
DROP DATABASE yourDBname

CREATE DATABASE yourDBname

코드의 일부에 대해 AnandPhadke에게 +1

이 코드는 데이터베이스에 대한 모든 활성 연결을 닫습니다.

WHILE EXISTS(select NULL from sys.databases where name='YourDBName')
BEGIN
    DECLARE @SQL varchar(max)
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
    FROM MASTER..SysProcesses
    WHERE DBId = DB_ID(N'YourDBName') AND SPId <> @@SPId
    EXEC(@SQL)
    DROP DATABASE [YourDBName]
END
GO

CREATE DATABASE YourDBName
GO

DBName을 두 번 이상 입력하도록 요구하면 오류가 발생하기 쉬우 며, 어떤 시점에서는 일관성없는 항목과 의도하지 않은 결과로 실행됩니다.

다양한 지원을 제공하는 AnandPhadke 또는 Pierre의 답변이 선호 될 것입니다.

DECLARE @DBName varchar(50) = 'YourDatabaseName'
USE master
IF EXISTS(select * from sys.databases where name= @DBName)
EXEC('DROP DATABASE ' + @DBName)

EXEC('CREATE DATABASE ' + @DBName)

또는

DECLARE @DBName varchar(50) = 'YourDatabaseName'
WHILE EXISTS(select NULL from sys.databases where name = @DBName )
BEGIN
    DECLARE @SQL varchar(max)
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DBName) AND SPId <> @@SPId
    EXEC(@SQL)
    EXEC('DROP DATABASE ' + @DBName)
END
GO

SQL Server 2016 (이상)은 한 줄과 atomic (?) 구문을 지원합니다. DROP DATABASE IF EXISTS database_name

참조 : https://msdn.microsoft.com/en-us/library/ms178613.aspx


데이터베이스에서 생성 스크립트를 추출합니다.

이렇게하면 데이터베이스의 모든 항목 (테이블, 키 등)에 대한 생성 스크립트가 추출됩니다. 단순히 빈 데이터베이스를 생성하려면 다음을 실행하십시오.CREATE DATABASE <dbname>


이것은 나에게 가장 적합합니다.

if exists (select name from sys.databases where name='YourDBName')
alter database YourDBName set single_user with rollback immediate
go
if exists (select name from sys.databases where name='YourDBName')
drop database YourDBName

참고 URL : https://stackoverflow.com/questions/12364250/dropping-and-recreating-databases-in-microsoft-sql-server

반응형