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

Hvordan dropper man en liste over SQL Server-tabeller, ignorerer begrænsninger?

Det afhænger af, hvordan du vil droppe bordene. Hvis listen over tabeller skal falde, dækker næsten over 20 % af tabellerne under din DB.

Så vil jeg deaktivere alle begrænsningerne i den DB under mit script og slippe tabellerne og aktivere begrænsningerne under det samme 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'

Til sidst skal du starte denne forespørgsel for at kontrollere status for dine begrænsninger.

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

Hvis du ikke ønsker at deaktivere begrænsningerne på databaseniveau, så lav en liste over tabeller, som du vil slette.

Trin 1:Tjek de begrænsninger, der er knyttet til disse tabeller

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

Trin 2:Deaktiver de begrænsninger, der er knyttet til disse tabeller.

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

Trin 3:Drop tabellerne

DROP TABLE TABLENAME


  1. SQL OPDATERING alle værdier i et felt med tilføjet streng CONCAT virker ikke

  2. PHP og mod_dbd

  3. Hent klientens ip-adresse i mysql

  4. Android SQLite Journal-adfærd ændret?