Удаление и воссоздание баз данных в Microsoft SQL Server
я экспериментирую и учусь с Microsoft SQL Server 2008 R2 SP1. У меня есть база данных, где я провел много экспериментов. Теперь я хотел бы отбросить и воссоздать его. Поэтому я извлекаю сценарий создания из базы данных, удаляю его и использую сценарий для его воссоздания. К моему удивлению, все таблицы, ключи и т. д. До сих пор нет. Как удалить базу данных, чтобы я мог перестроить базу данных с нуля?
6 ответов:
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
требование, чтобы имя DB было введено более одного раза, подвержено ошибкам, в какой-то момент оно будет выполняться с несогласованными записями и непреднамеренными последствиями.
ответы от 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 (и выше) поддерживает одну строку и атомарный (?) синтаксис
DROP DATABASE IF EXISTS database_name