programing

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

minimums 2023. 6. 22. 21:38
반응형

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

코드의 그의 부분에 대해 아난드 파드케에게 +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

SQL Server 2016 이상에서는 한 줄 및 아토믹(?) 구문을 지원합니다.DROP DATABASE IF EXISTS database_name

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

DBName을 두 번 이상 입력해야 하는 경우 오류가 발생하기 쉬우며, 일관되지 않은 항목과 의도하지 않은 결과로 실행될 수 있습니다.

다양한 지원을 받는 아난드 파드케 또는 피에르의 답변이 저에게는 더 선호될 것입니다.

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

데이터베이스에서 생성 스크립트를 추출

그러면 데이터베이스의 모든 항목(테이블, 키 등)에 대한 작성 스크립트가 추출됩니다.단순히 빈 데이터베이스를 작성하려는 경우,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

반응형