CREATE DATABASE equivilant de RESTORE DATABASE WITH REPLACE

1

Eu tenho um script T-SQL que descarta e recria um banco de dados da seguinte forma:

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

Neste momento, meu sistema está em um estado em que o banco de dados é descartado, mas o LDF / MDF existe, portanto, a instrução CREATE DATABASE está no seguinte estado:

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.

O comando restore database tem uma opção REPLACE na cláusula WITH para quando isso acontecer. Existe um equivalente na instrução CREATE DATABASE?

    
por Justin Dearing 08.10.2010 / 18:27

2 respostas

0

Acho que isso está acontecendo devido à sua declaração off-line definida.

Tente algo assim:

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
    
por 08.10.2010 / 18:48
2

Não há uma instrução equivalente para CREATE DATABASE porque você não quer que alguém sobrescreva um arquivo que não seja do banco de dados. O SQL Server não sabe de que arquivo resta - pode ser um arquivo do SO. Permitir que as pessoas criem bancos de dados e sobrescrevam arquivos do sistema operacional seria uma vulnerabilidade de segurança.

    
por 08.10.2010 / 18:51

Tags