如何正确地通过vNEXT构建任务删除SQL Server数据库

时间:2017-05-22 12:49:05

标签: sql-server powershell tfs build vnext

我们的测试机器有一个PowerShell清理脚本:

<option value="**<%=(rsNtsC.Fields.Item("NotesCategoryID").Value)%>**">

通常它可以工作,但有时它无法删除数据库,因为似乎有一些打开的连接,并且构建任务无法删除正在使用的数据库。

这似乎也发生在&#34;某些时候&#34;或&#34;随机&#34;。

有关增强脚本的建议吗?

(使用lates TFS 2017 on prem和SQL Server 2014)

3 个答案:

答案 0 :(得分:1)

如果您需要在没有警告的情况下切断所有用户,请在删除之前将数据库设置为脱机。

$commandText = @"
 exec sp_msforeachdb 'IF ''?'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'')
    BEGIN
        alter database [?] set offline with rollback immediate;drop database [?];
    END';
"@

答案 1 :(得分:0)

如果在这里找到一个脚本:

Drop all databases from server

-- drops all user databases
DECLARE @command nvarchar(max)
SET @command = ''

SELECT  @command = @command
+ 'ALTER DATABASE [' + [name] + ']  SET single_user with rollback immediate;'+CHAR(13)+CHAR(10)
+ 'DROP DATABASE [' + [name] +'];'+CHAR(13)+CHAR(10)
FROM  [master].[sys].[databases] 
 where [name] not in ( 'master', 'model', 'msdb', 'tempdb');

SELECT @command
EXECUTE sp_executesql @command

它按预期工作,仍然感谢您的帮助

答案 2 :(得分:0)

我建议使用SMO吗?

push-location;
import-module sqlps -disablenamechecking;
pop-location

$serverName = '.';
$server = new-object microsoft.sqlserver.management.smo.server $servername;
foreach ($db in $server.Databases | where {$_.IsSystemObject -eq $false}) {
   $server.killDatabase($db.Name);
}