Jak mogę usunąć wszystkie rekordy ze wszystkich tabel mojej bazy danych? Czy mogę to zrobić za pomocą jednego polecenia SQL, czy potrzebuję jednego polecenia SQL na jedną tabelę?
sql
sql-server
delete-row
multi-table-delete
AndreyAkinshin
źródło
źródło
EXEC sp_MSForEachTable 'DBCC CHECKIDENT(''?'', RESEED, 0)'
po DELETE FROM, aby zresetować wszystkie kolumny tożsamości z powrotem do 0.DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'...
. U mnie pracowało:EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON; DELETE FROM ?'
Zwykle będę po prostu używał nieudokumentowanego proc sp_MSForEachTable
Zobacz też: Usuń wszystkie dane w bazie danych (jeśli masz ZK)
źródło
create database testing; GO use testing; create table t1 (i int primary key) create table t2(i int primary key,p int references t1)
źródło
Zdaję sobie sprawę, że to późno, ale zgadzam się z sugestią AlexKuznetsova, aby napisać skrypt bazy danych, zamiast przechodzić przez kłopoty z czyszczeniem danych z tabel. Jeśli
TRUNCATE
rozwiązanie nie zadziała i zdarzy się, że masz dużą ilość danych, wydawanie (rejestrowanych)DELETE
wyciągów może zająć dużo czasu i pozostaną z identyfikatorami, które nie zostały ponownie wprowadzone (tj.INSERT
Instrukcja do tabeli zIDENTITY
kolumna dostanie ci ID 50000 zamiast identyfikatora z 1).Aby wykonać skrypt całej bazy danych, w programie SSMS kliknij bazę danych prawym przyciskiem myszy, a następnie wybierz
TASKS
->Generate scripts
:Kliknij,
Next
aby pominąć ekran otwierający kreatora, a następnie wybierz obiekty, które chcesz skryptować:w
Set scripting options
ekranie możesz wybrać ustawienia skryptów, takie jak generowanie 1 skryptu dla wszystkich obiektów lub oddzielne skrypty dla poszczególnych obiektów oraz zapisywanie pliku w Unicode lub ANSI:Kreator wyświetli podsumowanie, którego możesz użyć, aby sprawdzić, czy wszystko jest zgodne z oczekiwaniami, i zamknij, klikając „Zakończ”.
źródło
Najpierw musisz wyłączyć wszystkie wyzwalacze:
Uruchom ten skrypt: (Zaczerpnięte z tego postu Dziękuję @SQLMenace)
Ten skrypt wyprodukuje
DELETE
instrukcje w odpowiedniej kolejności. zaczynając od tabel, do których istnieją odniesienia, a następnie odwołując się do tabelSkopiuj
DELETE FROM
instrukcje i uruchom je razwłącz wyzwalacze
Zatwierdź zmiany:
źródło
Zwykle znacznie szybciej jest skryptowanie wszystkich obiektów w bazie danych i tworzenie pustego, który służy do usuwania lub obcinania tabel.
źródło
Poniżej skrypt, którego użyłem do usunięcia wszystkich danych z bazy danych SQL Server
źródło
źródło
Alternatywną odpowiedzią jest to, że jeśli korzystasz z Visual Studio SSDT lub ewentualnie Red Gate Sql Compare, możesz po prostu uruchomić porównanie schematu, wykonać skrypt, usunąć starą bazę danych (prawdopodobnie najpierw wykonaj kopię zapasową na wypadek, gdybyś potrzebował dane), a następnie utwórz nową bazę danych za pomocą skryptu utworzonego przez narzędzie porównawcze. Podczas gdy w przypadku bardzo małej bazy danych może to wymagać więcej pracy, w przypadku bardzo dużej bazy danych znacznie szybciej będzie po prostu usunąć bazę danych, a następnie poradzić sobie z różnymi wyzwalaczami i ograniczeniami, które mogą występować w bazie danych.
źródło
Tak, możliwe jest usunięcie za pomocą jednej linii kodu
źródło