Comment désactiver les contraintes pour toutes les tables et les activer?

j'ai 60 tables. Je veux laisser tomber 10 tableaux où ces 10 tableaux sont des contraintes (PK,FK) à 20 autres tableaux. En abandonnant ces 10 tableaux, je dois tronquer ou supprimer des données des 20 autres tableaux. Enfin, je veux désactiver toutes les contraintes de 60 tables (FK,PK) et ensuite activer toutes les contraintes de 60 tables après que j'en ai fini avec mon travail d'Ajout/Suppression de tables. Est-ce possible?

quand je laisse tomber une table il demande FK. Quand je tronque ces dépendances FK il aussi est toujours la même. Je ne veux pas déconner avec tous ces FK,PK.

je veux connaître une méthode plus intelligente.

25
demandé sur HappyCoding 2013-02-20 09:21:09

4 réponses

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
GO

, Vous pouvez aussi faire ceci:

EXEC sp_MSforeachtable @command1="ALTER TABLE ? DISABLE TRIGGER ALL"
GO

pour leur permettre ensuite

EXEC sp_MSforeachtable @command1="ALTER TABLE ? ENABLE TRIGGER ALL"
GO

-- SQL enable all constraints - enable all constraints sql server
-- sp_MSforeachtable is an undocumented system stored procedure
EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"
GO

Edit:

Si désactiver les contraintes n'est pas suffisant, vous devrez les supprimer.

si vous laissez tomber et recréez les tables, vous devrez recréer les contraintes de clé étrangère par la suite.

Si vous avez juste besoin de laissez tomber les contraintes, vous pourriez trouver cela utile:

SQL DROP TABLE foreign key constraint

si vous avez besoin d'écrire un script pour supprimer et créer les contraintes, vous pourriez trouver mon message ici plus utile:

SQL Server: Comment obtenir la référence de clé étrangère de information_schema?

46
répondu Stefan Steiger 2017-05-23 12:10:25

Pour désactiver vous pouvez appliquer ceci:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

pour activer:

EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
23
répondu SrividhyaShama 2013-11-27 17:31:26
declare @tname varchar(128), @tschema varchar(128);

declare tables cursor for
select TABLE_SCHEMA, TABLE_NAME
from INFORMATION_SCHEMA.TABLES;

open tables;

fetch next from tables
    into @tschema, @tname;

while @@FETCH_STATUS = 0
begin
    execute ('alter table [' + @tschema + '].[' + @tname + '] nocheck constraint all');
    fetch next from tables
        into @tschema, @tname;
end;

close tables;

deallocate tables;
7
répondu Alexey 2013-02-20 05:47:59

Essayez d'utiliser cette commande

ALTER TABLE table_Name NOCHECK CONSTRAINT all

pour désactiver toutes les contraintes pour vos tables, et le faire pour toutes vos 10 tables , mais avant cela vérifiez si vous n'avez pas mis de Delete_cacade sur vos tables parce que l'erreur qui s'affiche peut-être à cause des dépendances de sub_tables aussi. si cela ne fonctionnait pas, essayez de désactiver la contrainte spécifique par cette commande, il peut y avoir deux ou trois dépendances supplémentaires.

ALTER TABLE tableName NOCHECK CONSTRAINT constraintName
5
répondu Maryam Arshi 2013-02-20 05:45:25