Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie lösche ich eine Liste von SQL Server-Tabellen und ignoriere Einschränkungen?

Es hängt davon ab, wie Sie die Tabellen löschen möchten. Wenn die Liste der Tabellen gelöscht werden muss, deckt sie fast über 20 % der Tabellen in Ihrer Datenbank ab.

Dann werde ich alle Beschränkungen in dieser DB unter meinem Skript deaktivieren und die Tabellen löschen und die Beschränkungen unter demselben Skript aktivieren.

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

Um schließlich den Status Ihrer Einschränkungen zu überprüfen, starten Sie diese Abfrage.

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

Wenn Sie die Einschränkungen auf Datenbankebene nicht deaktivieren möchten, erstellen Sie eine Liste der Tabellen, die Sie löschen möchten.

Schritt 1:Überprüfen Sie die Einschränkungen, die diesen Tabellen zugeordnet sind

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

Schritt 2:Deaktivieren Sie die Einschränkungen, die diesen Tabellen zugeordnet sind.

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

Schritt 3:Löschen Sie die Tabellen

DROP TABLE TABLENAME