删除数据库 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 - 异常的主要内容,如果未能解决你的问题,请参考以下文章

server 2008 r2能安装sql server 2016吗?

sql server 2008 r2那些版本有啥区别

求和然后删除一行 - SQL Server 2008 R2

sql 2008 r2 在sql 2008上兼容么

SQL Server 2008 R2 安装失败(图)

SQL2008和sql2008 r2有啥区别