2012-01-27 1 views
8

Я использую следующую команду в моем файле MSBuild, чтобы удалить базу данныхпадение DB с использованием MSBuild, даже если используется

sqlcmd -E -S <ServerName> -Q "DROP DATABASE <DBName>" 

Но иногда я получаю ошибку

Невозможно удалить базу данных, так как это В настоящее время используется.

Какую команду следует использовать, чтобы БД отбрасывалась, даже если она используется?

+3

Закройте все соединения с БД, а затем попробуйте команду DROP DATABASE. –

+0

Как закрыть все подключения к БД с помощью sqlcmd? –

ответ

3

Чтобы удалить все соединения с базой данных. См. Kill All Active Connections To A Database

Теперь выполните команду DROP DATABASE после описанной выше процедуры.

-1

Вы не можете удалить базу данных, которая используется. Check link for ref

+0

Итак, можно ли каким-либо образом использовать sqlcmd, чтобы закрыть все существующее соединение? –

+0

Downvote, позаботьтесь, чтобы объяснить? – Arran

19

Вы можете установить для своей базы данных значение SINGLE_USER, чтобы удалить все существующие соединения.

sqlcmd -E -S <ServerName> -Q "ALTER DATABASE <DBName> SET SINGLE_USER WITH ROLLBACK IMMEDIATE" 
sqlcmd -E -S <ServerName> -Q "DROP DATABASE <DBName>" 

Это предпочтительно, чтобы цикл по каждому из соединений и опуская их один за другим, потому что некоторые приложения будут немедленно снова.

+1

Он также запрещает новым пользователям подключаться ;-) – EBarr

+0

@Michael Спасибо, что опубликовали очень короткий ответ, а не ссылку на него. – jordanbtucker

0

Пожалуйста, используйте что-то вроде этого:

sqlcmd -S servername\instance -Q"use master;DROP DATABASE yourdatabase" 
0

Попробуйте это:

sqlcmd -S .\MAPS -Q "RESTORE DATABASE Awards FROM DISK = 'C:\Awards_Project 
\Awards_FULL.bak' WITH REPLACE, MOVE 'Awards' to 'C:\Awards_Project\Awards.mdf', 
MOVE 'Awards_log' to 'C:\Awards_Project\Awards.ldf'" 
0

Вы можете альтернативно перезапустить службу SQL, а затем выполнить падение, например, в a myfile.bat

@echo off 
REM Requires administrative rights to restart service 
REM open powershell and execute command in administrative mode 
powershell -Command "Start-Process 'cmd' -Verb RunAs -ArgumentList '/c net stop MSSQLSERVER && net start MSSQLSERVER && exit'"  
echo Please wait ~10 seconds for sql service to restart. 
Timeout /t 10 /nobreak 
echo Dropping database. 
sqlcmd -S localhost -Q "drop database [database Name]"