从powershell删除SQL Server数据库

use*_*342 10 sql-server powershell database-administration

我在本地计算机上有一个SQL Server实例.\SC.我想使用PowerShell脚本从该实例中删除数据库.我需要sa用户登录我的数据库.

这是我到目前为止的代码,但它不起作用:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$srv = new-object Microsoft.SqlServer.Management.Smo.Server(".\SC")
$conContext = $srv.ConnectionContext
$conContext.LoginSecure = $FALSE
$conContext.Login = "sa"
$conContext.Password = "MyPlainTextPass"
$srv2 = new-object Microsoft.SqlServer.Management.Smo.Server($conContext)
$srv2.Databases
Run Code Online (Sandbox Code Playgroud)

最后一行应该列出我的SQL实例中的数据库......但它给了我这个错误:

尝试枚举集合时发生以下异常:"无法连接到服务器.\ SC.".在行:1 char:1 + $ srv2.Databases + ~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],ExtendedTypeSystemException + FullyQualifiedErrorId:ExceptionInGetEnumerator

我究竟做错了什么?

use*_*342 16

我找到了一个不同的命令来做到这一点.它很简单:

invoke-sqlcmd -ServerInstance ".\SC" -U "sa" -P "MyPlainTextPass" -Query "Drop database MyDatabase;"
Run Code Online (Sandbox Code Playgroud)

  • 如果数据库不存在,这将失败 (2认同)
  • @liang如果服务器不存在,或者用户不存在,或者密码不正确,如果服务器上没有SQL Server,如果它针对SQL Server v1.0运行,这也会失败,或者如果它在没有powershell的机器上执行,或者在commodore 64上执行......他的回答的重点是解决原始问题,而不是围绕问题进行修饰。 (2认同)

rsy*_*rsy 6

使它对我有用的唯一方法是通过以下命令强制关闭与数据库的任何其他连接:

Invoke-SqlCmd -ServerInstance $Server @Auth `
    -Query "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name ='MyDBName') `
                BEGIN `
                    ALTER DATABASE [MyDBName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; `
                    DROP DATABASE [MyDBName]; `
                END;" `
    -Verbose
Run Code Online (Sandbox Code Playgroud)

反引号 (`) 是必需的,否则必须内联该命令