在PowerShell中,我用下面的代碼刪除所有非系統SQL Server數據庫:SQL服務器:刪除所有數據庫除了系統的人
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:選項'SINGLE_USER'不能在數據庫'master'中設置。
選項'SINGLE_USER'不能在數據庫'tempdb'中設置。
在C:\ tmp目錄\ drop.ps1:19字符:5
+調用-SQLCMD -ServerInstance $ sqlInstanceName -U $ sqlUser -P $平方米...... + ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~ + CategoryInfo:InvalidOperation:(:) [調用-SQLCMD],SqlPowerShellSqlExecutionException + FullyQualifiedErrorId:SQLERROR,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
我想IF DB_ID(''?'') > 4
會跳過任何系統DBS:
How can I omit system databases and allow SQL Server 2008 agent job to move past ERROR_NUMBER 208?
如果只發現系統數據庫(master,model,msdb,tempdb),我該如何使它正常終止?