sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo soltar una lista de tablas de SQL Server, ignorando las restricciones?

Depende de cómo quieras soltar las tablas. Si la lista de tablas debe caer cubre casi más del 20 % de las tablas en su base de datos.

Luego deshabilitaré todas las restricciones en esa base de datos bajo mi secuencia de comandos y soltaré las tablas y habilitaré las restricciones bajo la misma secuencia de comandos.

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

Finalmente, para verificar el estado de sus restricciones, inicie esta consulta.

--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 no desea deshabilitar las restricciones en el nivel de la base de datos, haga una lista de las tablas que desea descartar.

Paso 1:verifique las restricciones asociadas con esas tablas

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

Paso 2:deshabilite las restricciones asociadas con estas tablas.

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

Paso 3:Suelta las mesas

DROP TABLE TABLENAME