Eu quero eliminar um banco de dados. Usei o código a seguir, mas sem sucesso.
public void DropDataBase(string DBName,SqlConnection scon)
{
try
{
SqlConnection.ClearAllPools();
SqlCommand cmd = new SqlCommand("ALTER DATABASE " + DBName + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE", scon);
cmd.CommandType = CommandType.Text;
scon.Open();
cmd.ExecuteNonQuery();
scon.Close();
SqlCommand cmddrpdb = new SqlCommand("drop database " + DBName + "", scon);
cmddrpdb.CommandType = CommandType.Text;
scon.Open();
cmddrpdb.ExecuteNonQuery();
scon.Close();
}
catch (Exception ex)
{
MessageBox.Show("DropDataBase : " +ex.Message);
}
}
Estou recebendo um erro porque não é possível descartar o banco de dados porque ele está em uso . Por favor me ajude na questão mencionada acima.
c#
asp.net
sql-server
sachin kulkarni
fonte
fonte
antes de eliminar um banco de dados, você primeiro elimina a conexão com esse banco de dados.
Encontrei uma solução em http://www.kodyaz.com/articles/kill-all-processes-of-a-database.aspx
DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'YOUR_DABASE_NAME' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId --SELECT @SQL EXEC(@SQL)
fonte
Para gerenciamento de servidor SQL. estúdio:
Clique com o botão direito do mouse no banco de dados: Propriedades -> Opções -> Restringir acesso: defina como "Único usuário" e execute a eliminação em seguida
fonte
drop database myDatabase
. Não resolveu o problema. o mesmo erro (... it is currently is use
) ocorreu.É tarde demais, mas pode ser útil para futuros usuários.
Você pode usar a consulta abaixo antes de descartar a consulta do banco de dados:
alter database [MyDatbase] set single_user with rollback immediate drop database [MyDatabase]
Vai funcionar. Você também pode se referir a
Como faço para especificar "fechar conexões existentes" no script sql
Espero que ajude você :)
fonte
use master go
se você selecionar atualmente [MeuBanco de Dados]No SQL Server Management Studio 2016, execute o seguinte:
Clique com o botão direito no banco de dados
Clique em deletar
Verifique fechar as conexões existentes
Executar operação de exclusão
fonte
select * from sys.sysprocesses where dbid = DB_ID('Test')
(Substitua 'Teste' pelo nome do banco de dados que você está tentando eliminar) Isso informará quais processos estão usando.
Se você ainda quiser forçar a queda, a abordagem final é:
USE master; GO ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test;
Espero que isto ajude !
fonte
Em primeiro lugar, coloque a sua base de dados offline e depois desanexe-a, por exemplo
Use Master GO ALTER DATABASE dbname SET OFFLINE GO EXEC sp_detach_db 'dbname', 'true'
fonte
DROP DATABASE dbname;
Se você está descartando o banco de dados no SQL Management Studio e recebe a mensagem, não se esqueça de usar o Master como banco de dados selecionado, caso contrário, sua consulta também será uma conexão com o banco de dados.
USE Master; GO DROP DATABASE AdventureWorks; GO
fonte
Uma solução alternativa de força bruta pode ser:
Pare o serviço SQL Server.
Exclua os arquivos .mdf e .ldf correspondentes.
Inicie o serviço SQL Server.
Conecte-se ao SSMS e exclua o banco de dados.
fonte
Queria alertar que usei um script derivado de duas das respostas abaixo.
Acessórios para @Hitesh Mistry e @unruledboy
DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'[[[DatabaseName]]]' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId EXEC(@SQL) alter database [[[DatabaseName]]] set single_user with rollback immediate DROP DATABASE [[[DatabaseName]]]
fonte
DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'your_database_name' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId --SELECT @SQL EXEC(@SQL)
drop database your_database
fonte
Usando o MS SQL Server 2008, na caixa de diálogo DELETE com opções Fechar conexão, este é o script gerado, acho que é o melhor:
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'YOUR_DATABASE_NAME' GO USE [master] GO ALTER DATABASE [YOUR_DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO USE [master] GO /****** Object: Database [YOUR_DATABASE_NAME] Script Date: 01/08/2014 21:36:29 ******/ DROP DATABASE [YOUR_DATABASE_NAME] GO
fonte
USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
Só queria dar um vb.net (como acontece com a linguagem c se quiser converter ..) Eu estava tendo problema semelhante para desinstalar um dos meus programas, derrubar o banco de dados foi um pouco complicado, sim poderia fazer os usuários irem para o servidor largá-lo usando Express, mas isso não está limpo, depois de algumas análises, conseguimos um pequeno código perfeito junto ...
Sub DropMyDatabase() Dim Your_DB_To_Drop_Name As String = "YourDB" Dim Your_Connection_String_Here As String = "SERVER=MyServer;Integrated Security=True" Dim Conn As SqlConnection = New SqlConnection(Your_Connection_String_Here) Dim AlterStr As String = "ALTER DATABASE " & Your_DB_To_Drop_Name & " SET OFFLINE WITH ROLLBACK IMMEDIATE" Dim AlterCmd = New SqlCommand(AlterStr, Conn) Dim DropStr As String = "DROP DATABASE " & Your_DB_To_Drop_Name Dim DropCmd = New SqlCommand(DropStr, Conn) Try Conn.Open() AlterCmd.ExecuteNonQuery() DropCmd.ExecuteNonQuery() Conn.Close() Catch ex As Exception If (Conn.State = ConnectionState.Open) Then Conn.Close() End If MsgBox("Failed... Sorry!" & vbCrLf & vbCrLf & ex.Message) End Try End Sub
Espero que isso ajude alguém procurando xChickenx
ATUALIZAÇÃO Usando este conversor aqui está a versão C #:
public void DropMyDatabase() { var Your_DB_To_Drop_Name = "YourDB"; var Your_Connection_String_Here = "SERVER=MyServer;Integrated Security=True"; var Conn = new SqlConnection(Your_Connection_String_Here); var AlterStr = "ALTER DATABASE " + Your_DB_To_Drop_Name + " SET OFFLINE WITH ROLLBACK IMMEDIATE"; var AlterCmd = new SqlCommand(AlterStr, Conn); var DropStr = "DROP DATABASE " + Your_DB_To_Drop_Name; var DropCmd = new SqlCommand(DropStr, Conn); try { Conn.Open(); AlterCmd.ExecuteNonQuery(); DropCmd.ExecuteNonQuery(); Conn.Close(); } catch(Exception ex) { if((Conn.State == ConnectionState.Open)) { Conn.Close(); } Trace.WriteLine("Failed... Sorry!" + Environment.NewLine + ex.Message); } }
fonte
Para excluir um banco de dados, mesmo se ele estiver em execução, você pode usar este arquivo em lote
@echo off set /p dbName= "Enter your database name to drop: " echo Setting to single-user mode sqlcmd -Q "ALTER DATABASE [%dbName%] SET SINGLE_USER WITH ROLLBACK IMMEDIATE" echo Dropping... sqlcmd -Q "drop database %dbName%" echo Completed. pause
fonte
Você não pode eliminar um banco de dados que está sendo usado atualmente, no entanto, você pode usar o
sp_detach_db
procedimento armazenado se desejar remover um banco de dados do servidor sem excluir os arquivos do banco de dados.fonte
apenas renomear o banco de dados (para ser excluído) funcionou para mim. ele saiu do controle de qualquer processo que estava acessando o banco de dados e, portanto, fui capaz de descartá-lo.
fonte
Vá para a seção de bancos de dados disponíveis e selecione mestre. Em seguida, tente DROP DATABASE the_DB_name.
fonte