Chcę usunąć bazę danych. Użyłem następującego kodu, ale bezskutecznie.
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);
}
}
Otrzymuję błąd, ponieważ nie można usunąć bazy danych, ponieważ jest ona obecnie używana . Proszę o pomoc w powyższej kwestii.
c#
asp.net
sql-server
sachin kulkarni
źródło
źródło
przed upuszczeniem bazy danych należy najpierw zakończyć połączenie z tą bazą danych.
Znalazłem rozwiązanie pod adresem 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)
źródło
W przypadku zarządzania serwerem SQL. studio:
Baza danych kliknij prawym przyciskiem myszy: Właściwości -> Opcje -> Ogranicz dostęp: Ustaw na „Pojedynczy użytkownik”, a następnie wykonaj upuszczanie
źródło
drop database myDatabase
. To nie rozwiązało problemu. wystąpił ten sam błąd (... it is currently is use
).Jest już za późno, ale może się przydać przyszłym użytkownikom.
Możesz użyć poniższego zapytania przed porzuceniem zapytania do bazy danych:
alter database [MyDatbase] set single_user with rollback immediate drop database [MyDatabase]
To będzie działać. Możesz również odnieść się do
Jak określić „zamknij istniejące połączenia” w skrypcie sql
Mam nadzieję, że ci to pomoże :)
źródło
use master go
jeśli obecnie wybierzesz [MyDatabase]W programie SQL Server Management Studio 2016 wykonaj następujące czynności:
Kliknij prawym przyciskiem myszy bazę danych
Kliknij usuń
Sprawdź zamknij istniejące połączenia
Wykonaj operację usuwania
źródło
select * from sys.sysprocesses where dbid = DB_ID('Test')
(Zastąp „Test” nazwą bazy danych, którą próbujesz usunąć). Dzięki temu dowiesz się, które procesy jej używają.
Jeśli nadal chcesz wymusić spadek, ostatecznym podejściem jest:
USE master; GO ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test;
Mam nadzieję że to pomoże !
źródło
Najpierw wyłącz bazę danych, a następnie odłącz ją np
Use Master GO ALTER DATABASE dbname SET OFFLINE GO EXEC sp_detach_db 'dbname', 'true'
źródło
DROP DATABASE dbname;
Jeśli upuszczasz bazę danych w SQL Management Studio i otrzymujesz komunikat, nie zapomnij, że używasz bazy danych Master jako wybranej bazy danych, w przeciwnym razie twoje zapytanie jest również połączeniem z bazą danych.
USE Master; GO DROP DATABASE AdventureWorks; GO
źródło
Obejściem brutalnej siły może być:
Zatrzymaj usługę SQL Server.
Usuń odpowiednie pliki .mdf i .ldf.
Uruchom usługę SQL Server.
Połącz się z SSMS i usuń bazę danych.
źródło
Chciałem zaznaczyć, że użyłem skryptu wywodzącego się z dwóch poniższych odpowiedzi.
Podziękowania dla @Hitesh Mistry i @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]]]
źródło
Używając MS SQL Server 2008, w oknie dialogowym USUŃ z opcjami Zamknij połączenie, jest to wygenerowany skrypt, myślę, że jest najlepszy:
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
źródło
USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
Chciałem tylko dać vb.net (tak jak w przypadku języka c, jeśli chcesz przekonwertować ...) Miałem podobny problem z odinstalowaniem jednego z moich programów, upuszczenie bazy danych było trochę trudne, tak, może skłonić użytkowników do przejścia na serwer, porzuć go używając Express, ale to nie jest czyste, po kilku rozglądaniu się zebrałem razem doskonały kawałek kodu ...
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
Mam nadzieję, że pomoże to każdemu, kto szuka xChickenx
AKTUALIZACJA Przy użyciu tego konwertera jest tutaj wersja 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); } }
źródło
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
źródło
Nie możesz usunąć aktualnie używanej bazy danych, ale możesz użyć
sp_detach_db
procedury składowanej, jeśli chcesz usunąć bazę danych z serwera bez usuwania plików bazy danych.źródło
sama zmiana nazwy DB (do usunięcia) załatwiła mi sprawę. uwolnił się od jakiegokolwiek procesu, który uzyskiwał dostęp do bazy danych, więc mogłem ją porzucić.
źródło
Przejdź do sekcji dostępnych baz danych i wybierz wzorzec. Następnie spróbuj DROP DATABASE the_DB_name.
źródło
Aby usunąć bazę danych, nawet jeśli jest uruchomiona, możesz użyć tego pliku wsadowego
@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
źródło