IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

[SQL] Supprimer un champ clé étrangère


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut [SQL] Supprimer un champ clé étrangère
    Hello

    J'aimerai supprimer un champ d'une table qui est une clé étrangère. A la création, je n'ai pas spécifier de nom pour la contrainte, ce qui fait qu'il a été généré automatiquement et que je ne le connais pas ...

    Donc pour pouvoir faire mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE "PROGRAMMES" DROP "FK_MODELE";
    je dois connaître le nom de ma contrainte pour la supprimer dans un premier lieu.
    N'est-ce pas ?

    J'ai ici vu qu'on pouvait retrouver le nom d'une contrainte "NOT NULL", mais je n'ai pas trouver comment retrouver le nom d'une contrainte de clé étrangère ...

    Merci d'avance pour votre aide !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 021
    Billets dans le blog
    6
    Par défaut
    Il faut d'abord supprimer cette contrtainte en retrouvant son nom.
    Pour retrouver son nom, utilisez la vue d'information de schema :
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

    Puis :
    ALTER TABLE ... DROP CONSTRAINT ...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    J'ai bien retrouvé dans la vue d'information de schéma INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS les noms de mes contraintes d'intégrité référenciel.

    Mais comment obtenir directement celle d'un champ d'une table spécifique ?

    Etant donné que les noms des contraintes on l'air de suivre une même nomenclature du type "FK_nomtable_nomchamp_...", je peux faire une recherche sur le "CONSTRAINT_NAME" ... Mais cette façon ne me paraît ni propre, ni sûr ... Je suppose que chez les clients cette même nomenclature est utilisée, mais qui sait ... !

    J'ai tenté au hasard des requêtes types
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT object_name(constid) 
    FROM  INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
    WHERE id = object_id('VotreTable')
    AND name='VotreColonne'
    qui évidemment ne fonctionne pas ... Ne connaissant pas assez toute cette structure ...

  4. #4
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Voici ce que j'ai trouvé ici, que j'ai à peine modifié et qui semble fonctionner !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TC.CONSTRAINT_NAME, KCU.COLUMN_NAME 
    FROMINFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
    JOININFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU 
    ON TC.TABLE_NAME = KCU.TABLE_NAME 
    AND TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME 
    WHERE TC.CONSTRAINT_TYPE ='FOREIGN KEY'AND TC.TABLE_NAME ='MaTable'AND KCU.COLUMN_NAME ='MonChamp';
    Merci beaucoup pour ton aide SQLPro !

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    EDIT : Lecture trop rapide du dernier post, je retire ce que j'ai écrit après l'agression en MP.
    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2009, 12h20
  2. [SQL] Supprimer une ligne en fonction d'un type de champs
    Par Aspic dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 10/07/2007, 17h28
  3. [SQL] supprimer le "not null" à un type
    Par AnestheziE dans le forum SQL
    Réponses: 10
    Dernier message: 27/11/2003, 14h56
  4. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 02h59
  5. [SQL] Compter des champs indépendement l'un de l'autre
    Par rippey dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 29/10/2003, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo