Saya ingin menjatuhkan database. Saya telah menggunakan kode berikut, tetapi tidak berhasil.
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);
}
}
Saya mendapatkan Error karena tidak dapat menghapus database karena sedang digunakan . Tolong bantu saya dalam masalah yang disebutkan di atas.
c#
asp.net
sql-server
sachin kulkarni
sumber
sumber
sebelum menjatuhkan database, Anda memutuskan koneksi ke database itu terlebih dahulu.
Saya telah menemukan solusinya di 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)
sumber
Untuk manajemen server SQL. studio:
Klik kanan database: Properties -> Options -> Restrict Access: Setel ke "Single User" dan lakukan drop setelahnya
sumber
drop database myDatabase
. Itu tidak menyelesaikan masalah. kesalahan yang sama (... it is currently is use
) terjadi.Sudah terlambat, tapi mungkin berguna untuk pengguna di masa mendatang.
Anda dapat menggunakan kueri di bawah ini sebelum menjatuhkan kueri database:
alter database [MyDatbase] set single_user with rollback immediate drop database [MyDatabase]
Ini akan berhasil. Anda juga bisa merujuk ke
Bagaimana cara menentukan "tutup koneksi yang ada" dalam skrip sql
Saya harap ini akan membantu Anda :)
sumber
use master go
juga jika saat ini Anda memilih [MyDatabase]Di SQL Server Management Studio 2016, lakukan hal berikut:
Klik kanan pada database
Klik hapus
Periksa koneksi dekat yang ada
Lakukan operasi hapus
sumber
select * from sys.sysprocesses where dbid = DB_ID('Test')
(Ganti 'Test' dengan nama database yang Anda coba jatuhkan) Ini akan memberi tahu Anda proses mana yang menggunakannya.
Jika Anda masih ingin memaksa jatuh, pendekatan utamanya adalah:
USE master; GO ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test;
Semoga ini membantu !
sumber
Pertama, buat basis data Anda offline setelah itu lepaskan misalnya
Use Master GO ALTER DATABASE dbname SET OFFLINE GO EXEC sp_detach_db 'dbname', 'true'
sumber
DROP DATABASE dbname;
Jika Anda menjatuhkan database di SQL Management Studio dan Anda mendapatkan pesan, jangan lupa bahwa Anda menggunakan Master sebagai database yang dipilih, jika tidak, kueri Anda juga merupakan koneksi ke database.
USE Master; GO DROP DATABASE AdventureWorks; GO
sumber
Solusi kekerasan dapat berupa:
Hentikan Layanan SQL Server.
Hapus file .mdf dan .ldf yang sesuai.
Mulai Layanan SQL Server.
Hubungkan dengan SSMS dan hapus database.
sumber
Saya ingin mengatakan bahwa saya menggunakan skrip yang berasal dari dua jawaban di bawah ini.
Alat peraga untuk @Hitesh Mistry dan @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]]]
sumber
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
sumber
Menggunakan MS SQL Server 2008, dalam dialog DELETE dengan opsi Tutup koneksi, ini adalah skrip yang dihasilkan, saya rasa ini yang terbaik:
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
sumber
USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
Hanya ingin memberikan vb.net (seperti dengan bahasa c jika ingin mengkonversi ..) Saya mengalami masalah yang sama untuk uninstal salah satu program saya, menjatuhkan DB agak rumit, ya bisa membuat pengguna masuk ke server menjatuhkannya menggunakan Express, tapi itu tidak bersih, setelah beberapa melihat sekeliling mendapat sedikit kode yang sempurna bersama ...
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
Semoga ini bisa membantu siapa pun yang mencari xChickenx
UPDATE Menggunakan ini konverter sini adalah versi 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); } }
sumber
Untuk menghapus database meskipun sedang berjalan, Anda dapat menggunakan file batch ini
@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
sumber
Anda tidak bisa menjatuhkan database yang sedang digunakan namun Anda bisa menggunakan
sp_detach_db
prosedur tersimpan jika Anda ingin menghapus database dari server tanpa menghapus file database.sumber
hanya mengganti nama DB (untuk dihapus) melakukan trik untuk saya. itu menghentikan proses apa pun yang mengakses database, jadi saya bisa melepaskan database.
sumber
Masuk ke bagian database yang tersedia dan pilih master. Kemudian Coba DROP DATABASE the_DB_name.
sumber