2012-01-27 41 views
8

Tôi đang sử dụng lệnh sau đây trong tập tin MSBuild tôi để thả một cơ sở dữ liệuDrop DB sử dụng MSBuild ngay cả khi sử dụng

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

Nhưng đôi khi tôi nhận được lỗi

Không thể thả cơ sở dữ liệu vì nó là Đang được dùng.

Tôi nên sử dụng lệnh nào để DB bị giảm ngay cả khi đang sử dụng?

+3

Đóng tất cả kết nối với DB và sau đó thử lệnh DROP DATABASE. –

+0

Tôi làm cách nào để đóng tất cả kết nối với DB bằng sqlcmd? –

Trả lời

3

Để tiêu diệt tất cả các kết nối đến cơ sở dữ liệu của bạn. Xem Kill All Active Connections To A Database

Bây giờ, hãy phát hành lệnh DROP DATABASE của bạn sau quy trình trên.

-1

Bạn không thể thả cơ sở dữ liệu đang được sử dụng. Check link for ref

+0

Vì vậy, có một số cách sử dụng sqlcmd mà tôi có thể đóng tất cả các kết nối hiện có? –

+0

Downvote, quan tâm để giải thích? – Arran

19

Bạn có thể đặt cơ sở dữ liệu của mình thành SINGLE_USER để xóa tất cả các kết nối hiện có.

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

Điều này được ưu tiên lặp qua từng kết nối và xóa từng kết nối, vì một số ứng dụng sẽ kết nối lại ngay lập tức.

+1

Nó cũng ngăn người dùng mới kết nối ;-) – EBarr

+0

@Michael Cảm ơn bạn đã đăng câu trả lời rất ngắn thay vì liên kết tới nó. – jordanbtucker

0

Vui lòng sử dụng một cái gì đó như thế này:

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

Hãy thử điều này:

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

Hoặc bạn có thể khởi động lại dịch vụ sql và sau đó thực hiện thả ví dụ trong một số 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]" 
Các vấn đề liên quan