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
2
A
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;
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
Celui-ci fonctionne pour moi. Merci beaucoup. – Retrocoder
Si simple. Pourquoi tout le monde a-t-il posté des réponses aussi compliquées? –