CREATE DATABASE 相当于 RESTORE DATABASE WITH REPLACE

CREATE DATABASE 相当于 RESTORE DATABASE WITH REPLACE

我有一个 T-SQL 脚本,它删除并重新创建数据库,如下所示:

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 语句中是否有等效选项?

答案1

我认为这是因为你设置的离线语句而发生的。

尝试这样的操作:

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

答案2

没有与 CREATE DATABASE 等效的语句,因为您不希望有人覆盖非数据库文件。SQL Server 不知道该文件是从哪里遗留下来的 - 就此而言,它可能是一个 OS 文件。允许人们创建数据库并覆盖 OS 文件将是一个安全漏洞。

相关内容