Я хочу удалить базу данных. Я использовал следующий код, но безрезультатно.
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);
}
}
Я получаю сообщение об ошибке, так как не могу удалить базу данных, поскольку она в настоящее время используется . Пожалуйста, помогите мне в вышеупомянутой проблеме.
c#
asp.net
sql-server
Сачин Кулькарни
источник
источник
перед удалением базы данных вы сначала разрываете соединение с этой базой данных.
Я нашел решение на 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)
источник
Для управления SQL-сервером. студия:
Щелкните правой кнопкой мыши базу данных: «Свойства» -> «Параметры» -> «Ограничить доступ»: установите значение «Один пользователь» и затем выполните удаление.
источник
drop database myDatabase
. Это не решило проблему. та же ошибка (... it is currently is use
) произошла.Слишком поздно, но может пригодиться будущим пользователям.
Вы можете использовать следующий запрос, прежде чем отбрасывать запрос к базе данных:
alter database [MyDatbase] set single_user with rollback immediate drop database [MyDatabase]
Это будет работать. Вы также можете обратиться к
Как указать «закрыть существующие подключения» в sql-скрипте
Надеюсь, это вам поможет :)
источник
use master go
если вы сейчас выбираете [MyDatabase]В SQL Server Management Studio 2016 выполните следующие действия:
Щелкните правой кнопкой мыши базу данных
Нажмите удалить
Проверить, закрыть существующие подключения
Выполнить операцию удаления
источник
select * from sys.sysprocesses where dbid = DB_ID('Test')
(Замените «Test» именем базы данных, которую вы пытаетесь удалить). Это сообщит вам, какие процессы ее используют.
Если вы все еще хотите принудительно сбросить, то окончательный подход:
USE master; GO ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test;
Надеюсь это поможет !
источник
Сначала отключите вашу базу данных, после этого отключите ее, например
Use Master GO ALTER DATABASE dbname SET OFFLINE GO EXEC sp_detach_db 'dbname', 'true'
источник
DROP DATABASE dbname;
Если вы удаляете базу данных в SQL Management Studio и получаете сообщение, не забывайте, что вы используете Master в качестве выбранной базы данных, иначе ваш запрос также является подключением к базе данных.
USE Master; GO DROP DATABASE AdventureWorks; GO
источник
Возможный обходной путь с использованием грубой силы:
Остановите службу SQL Server.
Удалите соответствующие файлы .mdf и .ldf.
Запустите службу SQL Server.
Подключитесь к SSMS и удалите базу данных.
источник
Я хотел отметить, что использовал сценарий, основанный на двух приведенных ниже ответах.
Реквизит @Hitesh Mistry и @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]]]
источник
Используя MS SQL Server 2008, в диалоговом окне DELETE с параметрами закрытия соединения, это сгенерированный скрипт, я думаю, он лучший:
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
источник
USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
Просто хотел предоставить vb.net (как с языком c, если хотите преобразовать ..) У меня была аналогичная проблема с удалением одной из моих программ, удаление БД было немного сложным, да, можно было заставить пользователей перейти на сервер, сбросить его используя Express, но это не чисто, после нескольких осмотров мы собрали идеальный немного кода ...
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
Надеюсь, это поможет любому, кто ищет xChickenx
ОБНОВЛЕНИЕ Используя этот конвертер, вот версия 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); } }
источник
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
источник
Вы не можете удалить базу данных, которая используется в настоящее время, однако вы можете использовать
sp_detach_db
хранимую процедуру, если хотите удалить базу данных с сервера, не удаляя файлы базы данных.источник
просто переименование БД (для удаления) помогло мне. он вышел из-под контроля любого процесса, обращающегося к базе данных, и поэтому я смог отбросить базу данных.
источник
Перейдите в раздел доступных баз данных и выберите мастер. Затем попробуйте DROP DATABASE the_DB_name.
источник
Чтобы удалить базу данных, даже если она запущена, вы можете использовать этот командный файл
@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
источник