在Microsoft SQL Server中删除并重新创建数据库

时间:2012-09-11 06:52:44

标签: sql-server sql-server-2008

我正在使用Microsoft SQL Server 2008 R2 SP1进行实验和学习。 我有一个数据库,我做了很多实验。现在我想放弃并重新创建它。 所以我从数据库中提取创建脚本,我删除它,然后使用脚本重新创建它。 令我惊讶的是,所有的桌子,钥匙等仍然存在。 如何删除数据库,以便我可以从头开始重建数据库?

6 个答案:

答案 0 :(得分:95)

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

CREATE DATABASE yourDBname

答案 1 :(得分:28)

+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

答案 2 :(得分:9)

SQL Server 2016(及更高版本)支持一行和原子(?)语法DROP DATABASE IF EXISTS database_name

参考:https://msdn.microsoft.com/en-us/library/ms178613.aspx

答案 3 :(得分:8)

要求DBName被多次键入是容易出错的,在某些时候它会以不一致的条目和意外后果执行。

AnandPhadke或皮埃尔的答案对我来说是首选。

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 :(得分:1)

  

我从数据库中提取创建脚本

这将提取数据库中所有内容的创建脚本(表,键等)。如果您只想创建一个空数据库,只需运行CREATE DATABASE <dbname>

即可

答案 5 :(得分:-1)

这对我最有用:

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