Chcę usunąć wszystkie ograniczenia domyślne, ograniczenia sprawdzające, ograniczenia unikalne, klucze podstawowe i klucze obce ze wszystkich tabel w bazie danych SQL Server. Wiem, jak uzyskać wszystkie nazwy ograniczeń sys.objects
, ale jak wypełnić ALTER TABLE
część?
sql-server
ddl
constraint
Aaron Bertrand
źródło
źródło
Odpowiedzi:
Możesz łatwo uzyskać te informacje, łącząc
sys.tables.object_id = sys.objects.parent_object_id
dla tych typów obiektów.PRINT
jest tylko dla oka - jeśli masz wiele ograniczeń, może nie wyświetlać całego skryptu, ponieważ jest ograniczony do 8K. W takich przypadkach zapoznaj się z tą wskazówką, aby poznać inne sposoby sprawdzania skryptu przed uruchomieniem.Gdy będziesz zadowolony z wyników, odkomentuj
EXEC
.źródło
ORDER BY (CASE WHEN c.[type] IN ('PK', 'UQ') THEN 1 ELSE 0 END)
Zacząłem od zaakceptowanej odpowiedzi i zmodyfikowałem strukturę tak, aby używała pętli while zamiast budować pełną instrukcję SQL w dynamicznym SQL. Lubię to lepiej z kilku powodów.
Zapytanie nie jest przechowywane w dużej zmiennej @sql. Ta implementacja pozwala na wydruk dla każdego ograniczenia, które jest usuwane do celów rejestrowania w danych wyjściowych. Wykonanie wydawało mi się trochę szybsze w moich testach jednostkowych.
źródło