Зависи как искате да пуснете масите. Ако списъкът с таблици трябва да отпадне, покрива почти над 20% от таблиците във вашата DB.
След това ще деактивирам всички ограничения в тази DB под моя скрипт и ще премахна таблиците и ще активирам ограниченията под същия скрипт.
--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'
Накрая, за да проверите състоянието на вашите ограничения, стартирайте тази заявка.
--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
Ако не искате да деактивирате ограниченията на ниво база данни, тогава направете списък с таблици, които искате да премахнете.
Стъпка 1:Проверете ограниченията, свързани с тези таблици
SELECT *
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Tablename')
Стъпка 2:Деактивирайте ограниченията, които са свързани с тези таблици.
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint
Стъпка 3 :Пуснете таблиците
DROP TABLE TABLENAME