no se puede soltar y crear una base de datos en sql server


Estoy trabajando con SQL Server 2008 y parece que no puedo hacer drop y crear una base de datos.

He intentado algunas maneras diferentes, pero siempre termino fallando en soltar o tratando de "usar" antes de que parezca ser creado.

Mi intento actual se ve así.

use master;
GO
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'test')
BEGIN
DROP DATABASE [test];
END
GO
CREATE DATABASE [test];
GO
use [test];
GO

Los GO fueron sugeridos en un foro de MS como una forma de detener algunos problemas que ocurren al seleccionar bases de datos.

Con esto actualmente obtengo la salida (con una base de datos existente del mismo nombre) de:

Msg 3702, Nivel 16, Estado 4, Línea 3
No se puede eliminar la "prueba" de la base de datos porque está actualmente en uso.
Msg 1801, Nivel 16, Estado 3, Línea 1
La base de datos 'test' ya existe. Elija un nombre de base de datos diferente.
Msg 2714, Nivel 16, Estado 6, Línea 2
Ya hay un objeto llamado 'staff_type' en la base de datos.

Con las últimas 2 líneas repetidas para cada tabla en mi base de datos.

Author: Tor, 2012-10-03

12 answers

Normalmente obtenemos este error Si ha abierto cualquier ventana de consulta con conexión a esta base de datos, así que asegúrese de cerrar todas las ventanas de consulta abiertas conectadas a la base de datos que está tratando de eliminar.

No use la base de datos que está tratando de eliminar. utilice master para eliminar cualquier base de datos de usuarios que sea una buena práctica.

Asegúrese de que ningún otro proceso se adjunta a la base de datos que está tratando de soltar.

EXEC sp_who2
--Run kill spid for each process that is using the database to be dropped.
kill <<processid>> -- Kill 57

Use EXEC sp_who2 y verifique la columna DBName, el nombre de su base de datos no debe aparece en la lista, si aparece mata el proceso usando kill <<processid>> y luego intenta soltar.

Pruebe este código.

use master
GO

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'test')
DROP DATABASE [test]
GO

CREATE DATABASE [test]
GO

use [test]
GO
 64
Author: mr_eclair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-12 09:34:04
  1. Haga clic con el botón derecho en la base de datos y seleccione "Delete" (o haga clic con el botón izquierdo y presione la tecla 'del').
  2. Cuando aparezca el diálogo 'Eliminar objeto', asegúrese de marcar "Cerrar conexiones existentes" (vea a continuación, está desactivado por defecto).
  3. Presione "OK".

introduzca la descripción de la imagen aquí

 41
Author: ury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-13 04:28:18

Prueba esto:

use master;
GO

ALTER DATABASE test SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

GO
.....

Esto revertirá cualquier transacción que se esté ejecutando en esa base de datos y traerá la base de datos SQL Server en un modo de usuario único.

 28
Author: Joe G Joseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 05:51:59

Esto te dará todas las conexiones actuales:

select spid, hostname, [program_name], open_tran, hostprocess, cmd
from master.dbo.sysprocesses 
where dbid = db_id('your_database_name')

Entonces podría usar un cursor t-sql para ejecutar kill @spid, donde el valor de @spid es de la consulta anterior.

 3
Author: doubled,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-12 14:02:29

Si está obteniendo el error anterior mientras usa Master. luego debe cerrar SQL Server Management Studio completamente y abrirlo nuevamente y conectarse a él y ejecutar la consulta anterior.....

Espero que funcione.....

 1
Author: Akash KC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 06:00:17
ALTER DATABASE test1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE test1 SET OFFLINE;

DROP DATABASE test1

Pruebe este procedimiento almacenado dentro

 1
Author: Dileep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-24 11:22:01

Es necesario cerrar toda la ventana de consulta utilizando esta base de datos también es posible que tenga que reiniciar el servidor SQL por completo. Esto podría resolver tu problema.

 0
Author: ashu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-24 12:17:41

Si tiene archivos SQL abiertos que han consultado previamente la base de datos que está tratando de soltar, estos evitarán la caída. Como se mencionó anteriormente. Cerrando estos problema resuelto para mí

 0
Author: moglimcgrath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-10 14:37:43

Junto con la respuesta de mr_eclair anterior, me gustaría añadir:

  • Toda la ventana de consulta debe cerrarse donde se selecciona la base de datos currect.
  • Otra opción es hacer la bd en modo de usuario único.> > matará a todos los procesos de otros usuarios
  • establecer SIN CONEXIÓN CON REVERSIÓN INMEDIATA. hará que la base de datos en modo fuera de línea y traerla de vuelta
  • use sp_who2 para conocer a los usuarios que usan la base de datos actual. y matar las arañas necesarias
 0
Author: Samuel Joy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-26 15:09:46

Me enfrenté a este tipo de problema cuando trabajaba con Sql Server Management Studio. Después de muchos días de búsqueda en Google y experimentos, finalmente encontré un problema.

NB: Primero debe crear un script drop y create table para esta tabla, si no, no tendrá su tabla

1-Primero cree solo las tablas suyas con las claves foráneas correspondientes de ellas.

2-Crear un diagrama visual con estas tablas (Sql express-Databases-Databasename-DataBase Diagram - Haga clic derecho sobre él y seleccionar nuevo diagrama de base de datos)

3-Agregue las tablas de datos requeridas en el diagrama y cree la relación entre estas tablas de datos con las claves foráneas correspondientes agregadas durante la creación de las tablas

4-Luego guardó su Base de datos

En el caso de que haya olvidado agregar un campo dado en una datatable, puede fácilmente soltar y crear sus datatables, para hacer esto, siga estos pasos:

1-Abra el diagrama de la base de datos correspondiente

2-eliminar todos los relaciones que existen entre la tabla antigua a la que desea agregar algún campo y otras tablas

3-luego elimine la tabla correspondiente del diagrama (haga clic derecho sobre la tabla , luego seleccione eliminar tabla de la tabla de datos)

4-Guardar el diagrama (Ctrl +S)

5-vaya a la tabla que desea soltar y cree

6-Haga clic derecho en la tabla y seleccione (Tabla de script como luego seleccione soltar y crear luego vaya a nuevas ventanas del editor de consultas), esto escribirá su tabla en nueva tabla, en este momento puede modificarla a su necesidad, ejemplo con y viejo y nuevo misma tabla

Antiguo cuadro

        USE [DatabaseName]
      GO

         /****** Object:  Table [dbo].[Administrateur]    Script Date:  10/11/2016 2:06:04 PM ******/
      DROP TABLE [dbo].[Administrateur]
     GO

      /****** Object:  Table [dbo].[Administrateur]    Script Date: 10/11/2016 2:06:04 PM ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

   CREATE TABLE [dbo].[Administrateur](
[AdministrateurID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Surname] [nvarchar](max) NULL,
[Phone] [nvarchar](max) NOT NULL,
[Username] [nvarchar](max) NOT NULL,
[Password] [nvarchar](max) NOT NULL,
[Sexe] [nvarchar](max) NOT NULL,

 CONSTRAINT [PK_Administrateur] PRIMARY KEY CLUSTERED 
 (
[AdministrateurID] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =    OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 GO

Ahora la NUEVA MISMA TABLA CON 3 NUEVOS CAMPOS (Correo electrónico, Imagen y Sal)

   USE [DatabaseName]
   GO

    /****** Object:  Table [dbo].[Administrateur]    Script Date: 10/11/2016 2:06:04 PM ******/
  DROP TABLE [dbo].[Administrateur]
  GO

   /****** Object:  Table [dbo].[Administrateur]    Script Date:    10/11/2016 2:06:04 PM ******/
  SET ANSI_NULLS ON
  GO

  SET QUOTED_IDENTIFIER ON
  GO

   CREATE TABLE [dbo].[Administrateur](
[AdministrateurID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Surname] [nvarchar](max) NULL,
[Phone] [nvarchar](max) NOT NULL,
[Email] [nvarchar](max) NOT NULL,
[Username] [nvarchar](max) NOT NULL,
[Password] [nvarchar](max) NOT NULL,
[Image] [nvarchar](max) NOT NULL,
[Sexe] [nvarchar](max) NOT NULL,
[Salt] [nvarchar](max) NOT NULL,
 CONSTRAINT [PK_Administrateur] PRIMARY KEY CLUSTERED 
  (
   [AdministrateurID] ASC
 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =    OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

Luego, en la página de la Tabla de datos modificada, presione Ejecutar. No se ejecutará por primera vez y escribirá algunos errores encontrados, pero no le importa y simplemente presione Ejecutar en la segunda vez. En este momento, se ejecutará y escribirá el mensaje de éxito en la parte inferior de la documento.Luego seleccione la base de datos y haga clic en Actualizar (o pulse F5), él actualizará las tablas de su Base de datos en algún equipo o tendrá que reiniciar el programa antes de ver las actualizaciones en otros equipos(no se por qué, así que no me pida que le explique).

Vuelva ahora al diagrama y dd la tabla actualizada y luego conecte estas(s) tablas(s) a las tablas que tienen alguna relación con ella.

Espero que esto ahorre el tiempo de alguien.

I don

 0
Author: El camerounian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-11 09:54:36

Sé que llego tarde al juego. Pero así es como hago esto en un paso. Esto estaba sucediendo tan a menudo que no quería hacer esto en muchos pasos, así que lo combiné en un solo paso.

DECLARE @databaseName VARCHAR(30); 
DECLARE @resource_type_to_kill VARCHAR(30); 
DECLARE @processIdToKill INT;

SET @databaseName = 'yourDatabaseName' 
SET @resource_type_to_kill = 'DATABASE'

DECLARE @TempSession TABLE
(
    ProcessIdToKill INT,
    DatabaseName VARCHAR(100),
    Request_Mode VARCHAR(100),
    HostName VARCHAR(100),
    LoginTime VARCHAR(100),
    LoginName VARCHAR(100),
    Status VARCHAR(100),
    Reads VARCHAR(100),
    Writes VARCHAR(100)
);
INSERT @TempSession
SELECT DISTINCT
    session_id,
    name,
    request_mode, 
    host_name,
    login_time,
    login_name,
    status,
    reads,
    writes
FROM    sys.dm_exec_sessions
    LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id =  sys.dm_tran_locks.request_session_id
    INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
WHERE   resource_type = @resource_type_to_kill
AND name = @databaseName
ORDER BY name

--SELECT * FROM @TempSession --Debugging

SELECT @processIdToKill = ProcessIdToKill FROM @TempSession

--SELECT @processIdToKill --Debugging

--Run kill for the process that is using the database to be dropped.
DECLARE @SQL nvarchar(1000)
SET @SQL = 'KILL ' + CAST(@processIdToKill as varchar(4))
PRINT 'Killing the process'
EXEC (@SQL)

--And then drop the database
DECLARE @DropSQL nvarchar(1000)
SET @DropSQL = 'DROP DATABASE ' + @databaseName
PRINT 'Dropping the database'
EXEC (@DropSQL)

Si hay muchos procesos que están utilizando la base de datos, solo tendrá que ejecutar esto varias veces.

 0
Author: Sturla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-26 11:46:38

Pensamiento totalmente aleatorio aquí. Pero si tiene un proyecto SQL DB abierto en Visual Studio, su apertura ocupará los procesos incluso si no está tomando ninguna acción o tiene ventanas de consulta abiertas en SSMS.

Este fue el problema en mi caso. Cerrar Visual Studio por completo, me permitió eliminar la base de datos sin problemas.

 0
Author: pimbrouwers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-04 12:54:11