在Microsoft SQL Server删除和重建数据库(Dropping and recreat

2019-07-31 12:21发布

我尝试并使用Microsoft SQL Server 2008 R2 SP1中学习。 我在那里我做了很多的实验数据库。 现在我想删除并重新创建它。 所以我提取数据库的创建脚本,我删除它,我用的脚本来创建它。 令我惊讶的是,所有的表,钥匙等仍然存在。 如何删除数据库,这样我可以从头开始重建数据库?

Answer 1:

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

CREATE DATABASE yourDBname


Answer 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


Answer 3:

SQL服务器2016(及以上)支持一个线和原子(?)语法DROP DATABASE IF EXISTS database_name

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



Answer 4:

需要数据库名被输入不止一次很容易出错,在某些时候,它会不一致条目和意想不到的结果执行。

从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


Answer 5:

我提取数据库创建脚本

这种提取创建脚本数据库中的一切(表,钥匙等)。 如果你只是想创建一个空数据库,只需运行CREATE DATABASE <dbname>



Answer 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


文章来源: Dropping and recreating databases in Microsoft SQL Server