60

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

4

6 回答 6

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

CREATE DATABASE yourDBname
于 2012-09-11T06:58:23.713 回答
33

+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
于 2014-11-21T08:18:33.030 回答
11

要求多次键入 DBName 很容易出错,在某些时候执行时会出现不一致的条目和意想不到的后果。

我更喜欢 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
于 2016-02-10T20:20:09.807 回答
11

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

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

于 2016-11-17T02:27:53.550 回答
1

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

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

于 2012-09-11T06:56:51.263 回答
0

这对我最有效:

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
于 2016-06-06T16:00:20.233 回答