Удаление и воссоздание баз данных в Microsoft SQL Server


я экспериментирую и учусь с Microsoft SQL Server 2008 R2 SP1. У меня есть база данных, где я провел много экспериментов. Теперь я хотел бы отбросить и воссоздать его. Поэтому я извлекаю сценарий создания из базы данных, удаляю его и использую сценарий для его воссоздания. К моему удивлению, все таблицы, ключи и т. д. До сих пор нет. Как удалить базу данных, чтобы я мог перестроить базу данных с нуля?

6 51

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

REF: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