2010-12-13 37 views
2

J'ai un script SQL qui ajoute une clé étrangère à une table, comme indiqué ci-dessous. Parfois, la table contient déjà cette clé étrangère. Une erreur est donc affichée lorsqu'elle est exécutée à partir de Management Studio. Est-il possible d'ajouter une requête pour vérifier si la clé existe avant de l'appliquer? Y a-t-il une meilleure manière de faire cela? Cela doit fonctionner pour MS SQL 2005 et 2008.Recherche d'une clé étrangère avant de l'ajouter avec un script SQL

Répondre

11

Utilisez la fonction OBJECT_ID pour tester l'existence.

IF OBJECT_ID('[security].[FK_Pages_PageClasses]') IS NULL 
    ALTER TABLE [security].[Pages] WITH NOCHECK 
     ADD CONSTRAINT [FK_Pages_PageClasses] FOREIGN KEY ([PageClassId]) REFERENCES [security].[PageClasses]([PageClassId]) ON DELETE NO ACTION ON UPDATE NO ACTION; 
+0

Celui-ci fonctionne pour moi. Merci beaucoup. – Retrocoder

+0

Si simple. Pourquoi tout le monde a-t-il posté des réponses aussi compliquées? –

1

Vous pouvez vérifier l'existence de la clé étrangère en regardant dans le sys.foreign_keys object catalog view:

IF NOT EXISTS(SELECT * FROM sys.foreign_keys WHERE object_id = object_id(N'[Security].[FK_Pages_PageClasses]') and parent_object_id = object_id(N'[Security].[Pages]')) 
BEGIN 
    ALTER TABLE [security].[Pages] WITH NOCHECK 
    ADD CONSTRAINT [FK_Pages_PageClasses] FOREIGN KEY ([PageClassId]) REFERENCES [security].[PageClasses]([PageClassId]) ON DELETE NO ACTION ON UPDATE NO ACTION; 
END