To zależy od tego, jak chcesz porzucić stoły. Jeśli lista tabel musi zostać usunięta, obejmuje prawie ponad 20% tabel w bazie danych.
Następnie wyłączę wszystkie ograniczenia w tej bazie danych w moim skrypcie, usunę tabele i włączę ograniczenia w tym samym skrypcie.
--To Disable a Constraint at DB level
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
--Write the code to DROP tables
DROP TABLE TABLENAME
DROP TABLE TABLENAME
DROP TABLE TABLENAME
--To Enable a Constraint at DB level
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
Na koniec, aby sprawdzić stan swoich ograniczeń, uruchom to zapytanie.
--Checks the Status of Constraints
SELECT (CASE
WHEN OBJECTPROPERTY(CONSTID, 'CNSTISDISABLED') = 0 THEN 'ENABLED'
ELSE 'DISABLED'
END) AS STATUS,
OBJECT_NAME(CONSTID) AS CONSTRAINT_NAME,
OBJECT_NAME(FKEYID) AS TABLE_NAME,
COL_NAME(FKEYID, FKEY) AS COLUMN_NAME,
OBJECT_NAME(RKEYID) AS REFERENCED_TABLE_NAME,
COL_NAME(RKEYID, RKEY) AS REFERENCED_COLUMN_NAME
FROM SYSFOREIGNKEYS
ORDER BY TABLE_NAME, CONSTRAINT_NAME,REFERENCED_TABLE_NAME, KEYNO
Jeśli nie chcesz wyłączać ograniczeń na poziomie bazy danych, zrób listę tabel, które chcesz usunąć.
Krok 1:Sprawdź ograniczenia związane z tymi tabelami
SELECT *
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Tablename')
Krok 2:Wyłącz ograniczenia związane z tymi tabelami.
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint
Krok 3:Upuść stoły
DROP TABLE TABLENAME