删除数据库 SQL Server 2008 R2 Express Edition - 异常
Posted
技术标签:
【中文标题】删除数据库 SQL Server 2008 R2 Express Edition - 异常【英文标题】:Drop Database SQL Server 2008 R2 Express Edition - Exception 【发布时间】:2013-10-10 08:11:51 【问题描述】:我正在开发一个 C# 解决方案,我可以在 SQL Server 2008 R2 Express Edition 中删除数据库。我搜索了万维网并找到了以下解决方案: Script to kill all connections to a database (More than RESTRICTED_USER ROLLBACK)
我也尝试从 SQL Server 创建脚本:
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'apm4reform'
GO
USE [master]
GO
ALTER DATABASE [apm4reform] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
/****** Object: Database [apm4reform] Script Date: 10/10/2013 00:58:06 ******/
DROP DATABASE [apm4reform]
GO
这是我使用的代码:
private static bool DropDatabase(SqlConnection tmpConn, string connectionString, string databaseName)
string sqlDropDBQuery;
bool result = false;
try
tmpConn.ConnectionString = connectionString;
tmpConn.Open();
SqlCommand thisCommand = new SqlCommand();
thisCommand.Connection = tmpConn;
sqlDropDBQuery = string.Format("EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'0'\n GO\n USE [master]\n GO\n ALTER DATABASE [0] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO\n USE [master]\n GO\n DROP DATABASE [0]\n GO\n", databaseName);
thisCommand.CommandText = sqlDropDBQuery;
thisCommand.ExecuteNonQuery();
result = true;
catch (Exception ex)
result = false;
finally
tmpConn.Close();
return result;
不幸的是,我总是遇到异常:
“GO”附近的语法不正确。 'GO' 附近的语法不正确。不正确 'GO' 附近的语法。
我也试过不使用转义符\n!
有什么建议吗?
谢谢, 特罗
【问题讨论】:
我必须删除所有 GO 并使用 ';'反而!谢谢 听说过@"verbatim strings"
吗?
昨天遇到了同样的问题,如果您需要单独执行所有这些命令,请考虑将命令字符串按GO
拆分并单独执行每个命令字符串***.com/questions/19247542/…
【参考方案1】:
GO 是只有 Sql Server Management Studio 才能识别的语句分隔符。 您的 C# 代码不能通过 ExecuteNonQuery 在语句中使用。 只需删除它并确保每个语句都以分号结尾
sqlDropDBQuery = string.Format("EXEC msdb.dbo.sp_delete_database_backuphistory " +
"@database_name = N'0';USE [master];" +
"ALTER DATABASE [0] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;" +
"USE [master];DROP DATABASE [0];", databaseName);
【讨论】:
知道了,谢谢! sqlDropDBQuery = string.Format("EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'0'; 使用 [master] ; ALTER DATABASE [0] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; USE [master]; DROP DATABASE [ 0];", 数据库名); 而且您在查询中不需要USE master
。您应该将连接字符串设置为目标主机。【参考方案2】:
你可以试试这个。一个
var s =string. Format( @"EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'0';
USE master;
ALTER DATABASE 0 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE 0",yourdbname);
【讨论】:
以上是关于删除数据库 SQL Server 2008 R2 Express Edition - 异常的主要内容,如果未能解决你的问题,请参考以下文章