【发布时间】:2018-01-15 17:45:04
【问题描述】:
在 PowerShell 中,我使用以下代码删除所有非系统 SQL Server 数据库:
invoke-sqlcmd -ServerInstance $sqlInstanceName -U $sqlUser -P $sqlPass -Query "
EXEC sp_MSforeachdb
'IF DB_ID(''?'') > 4
BEGIN
ALTER DATABASE [?] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE [?]
END'
"
而且它似乎完成了这项工作。但是当我重新运行它时,我得到:
invoke-sqlcmd:无法在数据库“master”中设置选项“SINGLE_USER”。
无法在数据库“tempdb”中设置选项“SINGLE_USER”。
在 C:\tmp\drop.ps1:19 char:5
+ 调用-sqlcmd -ServerInstance $sqlInstanceName -U $sqlUser -P $sq ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
我以为IF DB_ID(''?'') > 4 会跳过任何系统数据库:
How can I omit system databases and allow SQL Server 2008 agent job to move past ERROR_NUMBER 208?
如果只找到系统数据库(master、model、msdb、tempdb),如何让它正常终止?
【问题讨论】:
标签: sql-server powershell