我正在尝试删除 MSSQL Server 数据库,但是没有成功。我尝试了多种方法,例如
user
ALTER DATABASE my_database
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE my_database;
GO
我也尝试过右键单击它并将其删除。
这不起作用,它告诉我“无法删除数据库“ima_debts”,因为它当前正在使用中”。问题是肯定没有其他用户连接到它。事实上,我禁用了数据库的 TCP/IP 并重新启动了它。
甚至连“Microsoft SQL Server Management Studio (Administrator)”都无法连接到它。我已确保登录到“master”。
为什么它告诉我它目前正在使用中。我可以从文件系统中删除目录或其他内容来删除这个数据库吗?
任何帮助,将不胜感激。
谢谢。
答案1
有时,IntelliSense 和/或 Management Studio 会因为您在对象资源管理器中单击了数据库而挂起打开的连接。此外,如果您有任何访问数据库的 SQL 代理作业,则禁用 TCP/IP 不会停止这些作业。
无论如何,以下脚本将通过在会话中将数据库置于单用户模式来“接管”数据库,然后将其脱机,以便没有人可以连接到它来运行查询。
然后您可以使用 Management Studio 或 T-SQL 删除数据库。
USE [MyDB];
GO
ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [MyDB] SET OFFLINE;
GO
答案2
USE [master]
GO
ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
/****** Object: Database [TestDB] Script Date: 11/29/2013 13:40:36 ******/
DROP DATABASE [TestDB]
GO
在 C# 中
public static void DeleteDataBase()
{
using (SqlConnection sqlconnection = new
SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=SSPI;"))
{
sqlconnection.Open();
// if you used master db as Initial Catalog, there is no need to change database
sqlconnection.ChangeDatabase("master");
string rollbackCommand = @"ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
SqlCommand deletecommand = new SqlCommand(rollbackCommand, sqlconnection);
deletecommand.ExecuteNonQuery();
string deleteCommand = @"DROP DATABASE [TestDB]";
deletecommand = new SqlCommand(deleteCommand, sqlconnection);
deletecommand.ExecuteNonQuery();
}
}
答案3
当您在 SSMS 中删除它时,会有一个复选框显示“关闭现有连接”。默认情况下不选中此复选框。选中此框,任何与数据库的连接都将终止,允许您删除它。