Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment supprimer une liste de tables SQL Server en ignorant les contraintes ?

Cela dépend de la façon dont vous voulez déposer les tables. Si la liste des tables doit être supprimée, couvre presque plus de 20 % des tables de votre base de données.

Ensuite, je vais désactiver toutes les contraintes de cette base de données sous mon script, supprimer les tables et activer les contraintes sous le même script.

--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'

Enfin, pour vérifier l'état de vos contraintes, lancez cette requête.

--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

Si vous ne souhaitez pas désactiver les contraintes au niveau de la base de données, créez une liste des tables que vous souhaitez supprimer.

Etape1 :Vérifier les Contraintes associées à ces tables

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Tablename')

Étape 2 :Désactivez les contraintes associées à ces tables.

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

Étape 3 :Déposez les tables

DROP TABLE TABLENAME