Próbuję napisać skrypt, który całkowicie opróżni bazę danych SQL Server. Oto co mam do tej pory:
USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
Po uruchomieniu w Management Studio otrzymuję:
Polecenia zostały wykonane pomyślnie.
ale gdy odświeżę listę tabel, wszystkie nadal tam są. Co ja robię źle?
Odpowiedzi:
To też nie działa, gdy istnieje wiele tabel kluczy obcych.
Znalazłem ten kod, który działa i robi wszystko, co próbujesz (usuń wszystkie tabele z bazy danych):
Możesz znaleźć post tutaj . To jest post Grokera.
źródło
Could not find stored procedure 'sp_MSForEachTable'.
dbo
. Jeśli masz niestandardowe schematy, musisz zmienić nasql
:SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.CONSTRAINT_SCHEMA + '].[' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']'
sp_MSforeachtable
nie jest dostępny na platformie Azure. Zamiast tego użyj odpowiedzi @ CountZero.Możesz także usunąć wszystkie tabele z bazy danych, używając tylko narzędzi MSSMS UI (bez użycia skryptu SQL). Czasami ten sposób może być wygodniejszy (zwłaszcza jeśli jest wykonywany okazjonalnie)
Robię to krok po kroku w następujący sposób:
źródło
W SSMS:
Teraz wszystko spadnie, w tym baza danych. Pamiętaj, aby usunąć kod elementów, których nie chcesz upuszczać. Alternatywnie, w sekcji „Wybierz obiekty” zamiast wybierać skrypt do całej bazy danych, wystarczy wybrać elementy, które chcesz usunąć.
źródło
delete
służy do usuwania wierszy z tabeli. Zamiast tego powinieneś użyćdrop table
.źródło
NOCHECK CONSTRAINT
linii jest nieprawidłowa?Akceptowana odpowiedź nie obsługuje platformy Azure. Korzysta z nieudokumentowanej procedury składowanej „sp_MSforeachtable”. Jeśli pojawi się błąd „lazur nie może znaleźć procedury przechowywanej” sp_msforeachtableable podczas działania lub po prostu chcesz uniknąć polegania na nieudokumentowanych funkcjach (które można usunąć lub zmienić ich funkcjonalność w dowolnym momencie), spróbuj wykonać poniższe czynności.
Ta wersja ignoruje tabelę historii migracji struktury encji „__MigrationHistory” i „database_firewall_rules”, który jest tabelą platformy Azure, której nie będziesz mieć uprawnień do usunięcia.
Lekko przetestowany na platformie Azure. Sprawdź, czy to nie ma niepożądanego wpływu na środowisko.
Pochodzą z:
https://edspencer.me.uk/2013/02/25/drop-all-tables-in-a-sql-server-database-azure-friendly/
http://www.sqlservercentral.com/blogs/sqlservertips/2011/10/11/remove-all-foreign-keys/
źródło
źródło
Masz prawie rację, zamiast tego użyj:
ale druga linia może wymagać wykonania więcej niż raz, aż przestanie się pojawiać błąd:
Wiadomość:
oznacza, że wszystkie tabele zostały pomyślnie usunięte.
źródło
Krótkie i słodkie:
źródło
sp_msforeachtable
przezsp_MSforeachtable
i bardzo polecam, aby dodaćuse yourdatabase
jako pierwszej linii. Działa jak urok.Postem jest:
źródło
Wydaje się, że polecenie powinno być bez kwadratowego koca
źródło
Dla mnie najprostszy sposób:
źródło
Spot na !!
Możesz użyć poniższego zapytania, aby usunąć wszystkie tabele z bazy danych
EXEC sp_MSforeachtable @ command1 = "DROP TABLE?"
Miłego kodowania!
źródło
Co powiesz na usunięcie całej bazy danych, a następnie utworzenie jej ponownie? To działa dla mnie.
źródło
Wiem, że jest to stary post, ale wypróbowałem wszystkie odpowiedzi tutaj na wielu bazach danych i okazało się, że wszystkie one działają czasami, ale nie przez cały czas, dla różnych (mogę tylko założyć) dziwactw SQL Servera.
W końcu to wymyśliłem. Przetestowałem to wszędzie (ogólnie rzecz biorąc) mogę i działa (bez żadnych ukrytych procedur przechowywania).
Uwaga, głównie na SQL Server 2014. (ale większość innych wersji, które wypróbowałem, również działa dobrze).
Próbowałem podczas pętli i zer, itp., Kursorów i różnych innych form, ale zawsze wydają się zawieść w niektórych bazach danych, ale nie w innych bez wyraźnego powodu.
Wyliczanie i używanie tego do iteracji zawsze wydaje się działać na wszystko, co przetestowałem.
źródło
W przypadku tabel czasowych jest to nieco bardziej skomplikowane, ponieważ mogą istnieć pewne klucze obce, a także wyjątek:
Drop table operation failed on table XXX because it is not a supported operation on system-versioned temporal tables
Możesz użyć:
źródło