Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como descartar uma lista de tabelas do SQL Server, ignorando restrições?


Depende de como você deseja descartar as tabelas. Se a lista de tabelas precisar ser descartada, cobre quase acima de 20% das tabelas em seu banco de dados.

Em seguida, desabilitarei todas as restrições nesse banco de dados no meu script e descartarei as tabelas e habilitarei as restrições no mesmo 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'

Por fim, para verificar o status de suas restrições, 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

Se você não quiser desabilitar as restrições no nível do banco de dados, faça uma lista de tabelas que deseja descartar.

Step1:Verifique as restrições associadas a essas tabelas
SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Tablename')

Passo 2 :Desabilite as Restrições que estão associadas a essas tabelas.
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

Passo 3:Solte as tabelas
DROP TABLE TABLENAME