Nie chcę wpisywać nazw wszystkich tabel, aby je wszystkie usunąć. Czy jest to możliwe za pomocą jednego zapytania?
sql
sql-server
Majid
źródło
źródło
Odpowiedzi:
Aby uzyskać listę tabel, użyj widoku INFORMATION_SCHEMA.TABLES . Wygeneruj skrypty upuszczania w instrukcji select i upuść je za pomocą Dynamic SQL:
Sys.Tables Version
Uwaga: Jeśli masz
foreign Keys
zdefiniowane między tabelami, najpierw uruchom poniższe zapytanie, aby wyłączyć wszystkieforeign keys
obecne w bazie danych.Więcej informacji znajdziesz tutaj .
źródło
[sys]
widoków schematu, jeśli przenoszenie przez rdbms nie jest wymagane. stackoverflow.com/a/3654313/251174Print @sql
wcześniejexec
. Następniesp_executesql
Jeśli chcesz użyć tylko jednego zapytania SQL do usunięcia wszystkich tabel, możesz użyć tego:
Jest to ukryta procedura składowana na serwerze sql i zostanie wykonana dla każdej tabeli w bazie danych, z którą się łączysz.
Uwaga: może być konieczne wykonanie zapytania kilka razy, aby usunąć wszystkie tabele ze względu na zależności.
Uwaga 2 : Aby uniknąć pierwszej notatki, przed uruchomieniem zapytania najpierw sprawdź, czy istnieją relacje kluczy obcych z jakąkolwiek tabelą. Jeśli tak, po prostu wyłącz ograniczenie klucza obcego, uruchamiając zapytanie poniżej:
źródło
Jeśli nie chcesz pisać, możesz utworzyć instrukcje za pomocą tego:
Następnie skopiuj i wklej do nowego okna SSMS, aby go uruchomić.
źródło
QUOTENAME
również, która wygląda schludnie.'DROP TABLE ' + QUOTENAME(name) + ';'
Możesz również użyć następującego skryptu, aby porzucić wszystko, w tym następujące:
https://michaelreichenbach.de/how-to-drop-everything-in-a-mssql-database/
źródło
Po prostu wprowadziłbym małą zmianę w odpowiedzi @ NoDisplayName i użyłbym
QUOTENAME()
go wTABLE_NAME
kolumnie, a także dołączyłbymTABLE_SCHEMA
kolumnę, aby tabele nie były wdbo
schemacie.Lub używając
sys
widoków schematu (zgodnie z komentarzem @ swasheck):źródło
[sys]
trzymałbym się widoków schematu, jeśli przenośność w Rdbms nie jest wymagana. stackoverflow.com/a/3654313/251174W następstwie odpowiedzi Dave.Gugga, byłby to kod, który ktoś potrzebowałby, aby pobrać wszystkie linie DROP TABLE w MySQL:
źródło
Najprostszym sposobem jest usunięcie całej bazy danych i utworzenie jej jeszcze raz:
To wszystko.
źródło
Jeśli ktoś inny miał problem z rozwiązaniem najlepszej odpowiedzi (w tym z wyłączeniem kluczy obcych), oto inne rozwiązanie ode mnie :
źródło
Niezupełnie 1 zapytanie, wciąż dość krótkie i słodkie:
źródło
Użyj poniższego skryptu do
drop
wszystkichconstraints
:Następnie wykonaj poniższe czynności, aby usunąć wszystkie tabele:
To zadziałało dla mnie w Azure SQL Database, gdzie
'sp_msforeachtable'
nie było dostępne!źródło
Wiem, że to pytanie jest bardzo stare, ale za każdym razem, gdy potrzebuję tego kodu ... tak przy okazji, jeśli masz tabele i widoki oraz Funkcje i PROCEDURY, możesz je usunąć za pomocą tego skryptu ... więc po co umieszczam ten skrypt? ponieważ jeśli usuniesz wszystkie tabele, będziesz musiał usunąć wszystkie widoki, a jeśli masz Funkcje i PROCEDURY, musisz je również usunąć.
Mam nadzieję, że to komuś pomoże
źródło