Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eliminare un elenco di tabelle di SQL Server, ignorando i vincoli?

Dipende da come vuoi eliminare i tavoli. Se l'elenco delle tabelle deve essere eliminato copre quasi il 20% delle tabelle nel database.

Quindi disabiliterò tutti i vincoli in quel DB sotto il mio script, eliminerò le tabelle e abiliterò i vincoli nello stesso 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'

Infine, per controllare lo stato dei tuoi vincoli, attiva questa query.

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

Se non vuoi disabilitare i vincoli a livello di database, crea un elenco di tabelle che vuoi eliminare.

Passaggio 1:controlla i vincoli associati a queste tabelle

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

Passaggio 2:disabilita i vincoli associati a queste tabelle.

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

Passaggio 3:elimina i tavoli

DROP TABLE TABLENAME