データベースを削除したい。次のコードを使用しましたが、役に立ちませんでした。
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);
}
}
現在使用中のためデータベースを削除できませんとしてエラーが発生しています。上記の問題で私を助けてください。
データベースに接続している人。別のデータベースに切り替えてから、ドロップしてみてください。
試して
SP_WHO
で接続者を確認します
必要に応じてKILL
データベースを削除する前に、最初にそのデータベースへの接続を削除します。
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サーバー管理の場合。スタジオ:
データベースを右クリックします:プロパティ->オプション->アクセス制限:「シングルユーザー」に設定し、その後ドロップを実行します
遅すぎますが、将来のユーザーにとっては役立つかもしれません。
データベースクエリを削除する前に、以下のクエリを使用できます。
alter database [MyDatbase] set single_user with rollback immediate
drop database [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;
お役に立てれば !
SQL Management Studioでデータベースを削除してメッセージが表示された場合、選択したデータベースとしてMasterを使用することを忘れないでください。さもないと、クエリはデータベースへの接続でもあります。
USE Master;
GO
DROP DATABASE AdventureWorks;
GO
まず、データベースを切り離した後、データベースをオフラインにします。
Use Master
GO
ALTER DATABASE dbname SET OFFLINE
GO
EXEC sp_detach_db 'dbname', 'true'
次の2つの回答から派生したスクリプトを使用したことを説明したかったのです。
@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]]]
総当たり攻撃の回避策は次のとおりです。
SQL Serverサービスを停止します。
対応する.mdfおよび.ldfファイルを削除します。
SQL Serverサービスを開始します。
SSMSに接続し、データベースを削除します。
Vb.netを提供したかっただけです(変換したい場合はc言語のように..)私のプログラムの1つをインストール解除するために同様の問題が発生していました、DBを削除するのは少し難しいです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を探している人に役立つことを願っています
UPDATEここで this コンバーターを使用するのは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);
}
}
使用可能なデータベースセクションに移動し、マスターを選択します。次に、DROP DATABASE the_DB_nameを試してください。
現在使用中のデータベースを削除することはできませんが、データベースファイルを削除せずにサーバーからデータベースを削除する場合は、sp_detach_db
ストアドプロシージャを使用できます。
MS SQL Server 2008を使用し、[接続を閉じる]ダイアログボックスの[削除]ダイアログで、これは生成されたスクリプトです。これが最適だと思います。
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
dBの名前を変更(削除)するだけでうまくいきました。データベースにアクセスしているプロセスの保留が解除されたため、データベースを削除できました。