Aktywnie rozwijam mój schemat w SQL Server 2008 i często chcę ponownie uruchamiać mój skrypt upuszczania / tworzenia bazy danych. Kiedy biegnę
USE [master]
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'MyDatabase')
DROP DATABASE [MyDatabase]
GO
Często otrzymuję ten błąd
Msg 3702, Level 16, State 4, Line 3
Cannot drop database "MyDatabase" because it is currently in use.
Jeśli klikniesz prawym przyciskiem myszy bazę danych w panelu eksploratora obiektów i wybierzesz zadanie Usuń z menu kontekstowego, pojawi się pole wyboru umożliwiające "zamknięcie istniejących połączeń"
Czy istnieje sposób na określenie tej opcji w moim skrypcie?
sql
sql-server
nacięcie
źródło
źródło
Idź do studia zarządzania i zrób wszystko, co opisujesz, tylko zamiast kliknąć OK, kliknij Skrypt. Pokaże kod, który uruchomi, który możesz następnie włączyć do swoich skryptów.
W takim przypadku chcesz:
źródło
Zgodnie z dokumentacją ALTER DATABASE SET , nadal istnieje możliwość, że po ustawieniu bazy danych w trybie SINGLE_USER nie będziesz mieć dostępu do tej bazy danych:
Tak więc kompletny skrypt usuwający bazę danych z istniejącymi połączeniami może wyglądać następująco:
źródło
Wiem, że jest za późno, ale może to komuś pomóc. korzystając z tego, przenieś bazę danych do trybu offline
źródło
Wypróbowałem to, co powiedział hgmnz na SQL Server 2012.
Kierownictwo stworzone dla mnie:
źródło
ROLLBACK IMMEDIATE
oświadczenie zostanie dołączone.sp_delete_database_backuphistory
Pochodzi od sprawdzania „Usuń kopii zapasowej i przywracania baz danych informacji o historii”.ALTER DATABASE SET SINGLE_USER ...
jeśli nie ma bieżących połączeń do zamknięcia.wypróbuj ten kod C #, aby porzucić bazę danych
public static void DropDatabases (string dataBase) {
źródło