使用REPLACE创buildRESTORE DATABASE平等的数据库

我有一个T-SQL脚本,可以像这样删除并重新创build一个数据库:

USE master GO IF EXISTS (SELECT name FROM sys.databases WHERE name = N'foo') BEGIN ALTER DATABASE [foo] SET OFFLINE WITH ROLLBACK IMMEDIATE; DROP DATABASE [foo] END GO CREATE DATABASE foo; GO -- OTHER DDL statements 

现在我的系统处于数据库被删除的状态,但是LDF / MDF存在,因此CREATE DATABASE语句处于以下状态:

 Msg 5170, Level 16, State 1, Line 2 Cannot create file 'C:\Program Files\Microsoft SQL Server\MSSQL10.PEER1\MSSQL\DATA\eventManagement.mdf' because it already exists. Change the file path or the file name, and retry the operation. Msg 1802, Level 16, State 4, Line 2 CREATE DATABASE failed. Some file names listed could not be created. Check related errors. 

在发生这种情况时,恢复数据库命令在WITH子句中有一个REPLACE选项。 在CREATE DATABASE语句中是否有等价物?

我想这是因为你设置的离线声明而发生的。

尝试这样的事情:

 create database foo GO IF EXISTS (SELECT name FROM sys.databases WHERE name = N'foo') BEGIN ALTER DATABASE [foo] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [foo] END CREATE DATABASE foo; GO 

对于CREATE DATABASE,没有相应的语句,因为您不希望有人覆盖非数据库文件。 SQL Server不知道该文件是从哪里遗留下来的 – 它可能是一个操作系统文件,就此而言。 允许人们创build数据库和覆盖操作系统文件将是一个安全漏洞。