Jak usunąć wszystkie wiersze ze wszystkich tabel w bazie danych SQL Server?
sql-server-2005
Michał Powaga
źródło
źródło
Odpowiedzi:
Zauważ, że TRUNCATE nie zadziała, jeśli masz zestaw integralności referencyjnej.
W takim przypadku zadziała:
źródło
USE [MyDataBase]
:? Czy powyższy pomysł zadziałałby, gdyby był w jakiś sposób dostosowany? ... Ponieważ nie chcę usuwać wszystkich baz danych przechowywanych przez serwer SQL.W moim ostatnim projekcie moim zadaniem było wyczyszczenie całej bazy danych za pomocą instrukcji sql, a każda tabela miała wiele ograniczeń, takich jak klucz podstawowy i klucz obcy. W bazie danych znajduje się ponad 1000 tabel, więc nie jest możliwe zapisanie zapytania usuwającego dla każdej tabeli.
Korzystając z procedury składowanej o nazwie sp_MSForEachTable która pozwala nam łatwo przetwarzać kod dla każdej tabeli w jednej bazie danych. Oznacza to, że jest używany do przetwarzania pojedynczego polecenia T-SQL lub różnych poleceń T-SQL dla każdej tabeli w bazie danych.
Dlatego wykonaj poniższe kroki, aby obciąć wszystkie tabele w bazie danych programu SQL Server:
Krok 1 - Wyłącz wszystkie ograniczenia w bazie danych, używając poniższego zapytania sql:
EXEC sys.sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
Krok 2 - Wykonaj operację usuwania lub obcięcia na każdej tabeli bazy danych za pomocą poniższej komendy sql:
Krok 3 - Włącz wszystkie ograniczenia w bazie danych, używając poniższej instrukcji sql:
źródło
sql server azure
?Musiałem usunąć wszystkie wiersze i zrobiłem to z następnym skryptem:
Mam nadzieję że to pomoże!
źródło
Oto rozwiązanie, które:
INFORMATION_SCHEMA.TABLES
określoną bazę danychSELECTS
tabele w oparciu o pewne kryteria wyszukiwaniasysdiagrams
i__RefactorLog
Początkowo próbowałem
EXECUTE sp_MSforeachtable 'TRUNCATE TABLE ?'
, ale to spowodowało usunięcie moich diagramów.źródło
ALTER TABLE
Nieco aby wyłączyć ograniczeń zawiedzie.W moim przypadku musiałem włączyć QUOTED_IDENTIFIER. Doprowadziło to do niewielkiej modyfikacji powyższej odpowiedzi Marka Rendle'a:
źródło
DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
źródło
Możesz usunąć wszystkie wiersze ze wszystkich tabel, stosując podejście takie, jak sugerował Rubens, lub po prostu upuścić i ponownie utworzyć wszystkie tabele. Zawsze dobrze jest mieć pełne skrypty do tworzenia bazy danych, więc może to być najłatwiejsza / najszybsza metoda.
źródło
W przypadku niektórych wymagań może być konieczne pominięcie niektórych tabel. Napisałem poniższy skrypt, aby dodać dodatkowe warunki do filtrowania listy tabel. Poniższy skrypt wyświetli również liczbę przed usunięciem i liczbę po usunięciu.
źródło
Ta odpowiedź opiera się na odpowiedzi Zacha Smitha, resetując również kolumnę tożsamości :
Oto zapytanie:
źródło
źródło
jeśli chcesz usunąć całą tabelę, musisz wykonać następną instrukcję SQL
źródło