Я экспериментирую и обучаюсь с Microsoft SQL Server 2008 R2 SP1. У меня есть база данных, где я провел много экспериментов. Теперь я хотел бы бросить и воссоздать его. Поэтому я извлекаю создание script из базы данных, я удаляю его, и я использую script для его воссоздания. К моему удивлению, все таблицы, ключи и т.д. Все еще существуют. Как удалить базу данных, чтобы я мог восстановить базу данных с нуля?
Удаление и восстановление баз данных в Microsoft SQL Server
Ответ 1
USE master
IF EXISTS(select * from sys.databases where name='yourDBname')
DROP DATABASE yourDBname
CREATE DATABASE yourDBname
Ответ 2
+1 для AnandPhadke для его части кода
Этот код закроет все активные подключения к базе данных, а затем опустит его
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
Ответ 3
Требование, чтобы имя DBN вводилось более одного раза, подвержено ошибкам, в какой-то момент он будет выполнен с несогласованными записями и непреднамеренными последствиями.
Ответы от 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
Ответ 4
SQL Server 2016 (и выше) поддерживает одну строку и атомный (?) синтаксис DROP DATABASE IF EXISTS database_name
Ответ 5
Я извлекаю создание script из базы данных
Извлеките создание script для всего в базе данных (таблицы, ключи и т.д.). Если вы просто хотите создать пустую базу данных, просто запустите CREATE DATABASE <dbname>
Ответ 6
Это работает лучше всего для меня:
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