2012-09-11 24 views
43

Estoy experimentando y aprendiendo con Microsoft SQL Server 2008 R2 SP1. Tengo una base de datos donde hice muchos experimentos. Ahora me gustaría dejarlo y recrearlo. Extraigo la secuencia de comandos de creación de la base de datos, la elimino y utilizo la secuencia de comandos para volver a crearla. Para mi sorpresa, todas las tablas, claves, etc. todavía están allí. ¿Cómo elimino la base de datos para poder reconstruir la base de datos desde cero?Dejar y recrear bases de datos en Microsoft SQL Server

Respuesta

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

CREATE DATABASE yourDBname 
+0

Tienes razón, mi pregunta fue estúpida. De hecho, las tablas que seguí viendo se crearon realmente en la base de datos maestra, en lugar de en mi base de datos. –

+0

¡Esto me ayudó mucho! –

1

extraigo el script de creación de base de datos

este extracto del script de creación para todo en la base de datos (tablas, claves, etc.). Si simplemente desea crear una base de datos vacía, basta con ejecutar CREATE DATABASE <dbname>

22

+1 a AnandPhadke por su parte del código

Este código se cerrarán todas las conexiones activas a la base de datos y luego dejar caer que

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 
6

Requerir que el DBName se tipee más de una vez es propenso a errores, en algún momento se ejecutará con entradas incoherentes y consecuencias imprevistas.

Las respuestas de AnandPhadke o Pierre con soporte variable serían las preferidas para mí.

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
USE master 
IF EXISTS(select * from sys.databases where name= @DBName) 
EXEC('DROP DATABASE ' + @DBName) 

EXEC('CREATE DATABASE ' + @DBName) 

o

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 
-1

Esto funciona mejor para mí: (?)

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 
+0

Esto realmente no responde la pregunta. Si tiene una pregunta diferente, puede formularla haciendo clic en [Preguntar pregunta] (http://stackoverflow.com/questions/ask). También puede [agregar una recompensa] (http://stackoverflow.com/help/privileges/set-bounties) para atraer más atención a esta pregunta una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/ que-reputación). - [De la crítica] (/ crítica/mensajes de baja calidad/12598382) –

+0

Creo que calculó mal esta respuesta, @KhanImranAli. Este intenta responder, aunque mal. Esto debe moderarse mediante votación, no mediante marcación y revisión negativa. – Palec

+1

Incluya una explicación de lo que hace su código y cómo responde la pregunta. Si obtiene un fragmento de código como respuesta, es posible que no sepa qué hacer con él. La respuesta debería dar al OP y a los futuros visitantes orientación. Señalar, cuál es la idea detrás de su código, ayuda enormemente a comprender el problema y aplicar o modificar su solución. – Palec

Cuestiones relacionadas