Comment faire pour supprimer toutes les contraintes de Clé Étrangère dans tous les tableaux?

Je veux écrire la commande sql à abandonner toutes les contraintes de toutes les tables. J'ai cherché sur internet et trouvé ce qui fonctionne très bien si la base de données est petite et sans complexe.

DECLARE @name VARCHAR(128) 
DECLARE @constraint VARCHAR(254) 
DECLARE @SQL VARCHAR(254) 
DECLARE @schema VARCHAR(128)

SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME) 
SELECT @schema = (SELECT TOP 1 schema_name(schema_id) FROM sys.objects WHERE [name] = @name) 

WHILE @name is not null 
BEGIN 
    SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME) 
    WHILE @constraint IS NOT NULL 
    BEGIN 
        SELECT @SQL = 'ALTER TABLE ' + @schema + '.[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']' 
        EXEC (@SQL) 
        PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name 
        SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME) 
    END 
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME) 
SELECT @schema = (SELECT TOP 1 schema_name(schema_id) FROM sys.objects WHERE [name] = @name) 
END 
GO 

Il ne fonctionne pas si je le lance avec une base de données plus complexe ou même AdventureWork. Elle montre quelques erreurs comme ci-dessous.

Msg 3728, Level 16, State 1, Line 1
'FK_ap_invoice_modification_type_id' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.
Msg 3725, Level 16, State 0, Line 1
The constraint 'PK_ap_invoice' is being referenced by table '_drop_now_ap_invoice_detail', foreign key constraint 'FK_ap_invoice_detail_ap_invoice'.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.

La raison en est que certains FKs sont référencés par une autre table. J'ai pour exécuter ce script pour un couple de fois jusqu'à ce que la base de données est propre.

Je veux savoir comment puis-je effacer tous les FKs dans la base de données.

En fonction de vos titre que vous souhaitez supprimer les clés étrangères. Mais votre dernière question, demander une "effacer tout", y compris les tables, procédures stockées, fonctions. Que voulez-vous dire?
Même si je suis sûr, vous devez avoir coché pour des questions similaires, mais je vous demande de revoir la solution ici : stackoverflow.com/a/1438933/1268844
Merci pour le point de sortir. Je suis en pleine charge avec des tâches. Je viens de mettre à jour ma question de détails pour le match avec le titre.
Il donne le même résultat que ma requête. "Msg 2801, Niveau 16, État 1, Procédure XXX, en Ligne 31 La définition de l'objet 'XXX' a changé depuis qu'il a été compilé."

OriginalL'auteur Anonymous | 2012-10-04