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 :

Trouver les clés primaires d'une base de données


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut Trouver les clés primaires d'une base de données
    Je cherche à créer une procédure stockée qui va prendre en paramètres
    un nombre de colonnes
    parmi une liste de types définie (entier, varchar, etc...)
    et qui va me retourner la ou les colonnes qui forment une clé primaire.

    Ex :
    Pour la table1 du schéma1 la clé primaire est composée de la colonne 1 et la colonne 2
    Pour la table2 du même schéma la clé primaire correspond à la première colonne 1
    etc ...

    Cela en se basant sur un échantillon défini en paramètres.

    Bien évidemment, le but est de trouver à partir des données d'une base de données
    la clé primaire de chaque table.

  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
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT TC.TABLE_SCHEMA, TC.TABLE_NAME, 
           STUFF((SELECT ', ' + COLUMN_NAME
    	          FROM   INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
    	          WHERE  TC.CONSTRAINT_SCHEMA = KCU.CONSTRAINT_SCHEMA AND 
    			         TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME
                  FOR XML PATH('')), 1, 1, '') AS PK_COMPOSEE
    FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
    WHERE  TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
    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
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Sous forme de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE FUNCTION F_PK_COMPOSITION(@SCHEMA_NAME sysname, @OBJECT_NAME sysname)
    RETURNS TABLE
    AS RETURN
    (
    SELECT TC.TABLE_SCHEMA, TC.TABLE_NAME, 
           STUFF((SELECT ', ' + COLUMN_NAME
    	          FROM   INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
    	          WHERE  TC.CONSTRAINT_SCHEMA = KCU.CONSTRAINT_SCHEMA AND 
    			         TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME
                  FOR XML PATH('')), 1, 1, '') AS PK_COMPOSEE
    FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
    WHERE  TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND 
           TC.TABLE_SCHEMA = COALESCE(@SCHEMA_NAME, TC.TABLE_SCHEMA) AND
    	   TC.TABLE_NAME = COALESCE(@OBJECT_NAME, TC.TABLE_NAME)
    );
    GO
    Appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM dbo.F_PK_COMPOSITION('dbo', 'Matable')
    --> renvoie la clef d'une table


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM dbo.F_PK_COMPOSITION(NULL, NULL)
    --> renvoie toutes les clefs de toutes les tables

    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/ * * * * *

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Merci pour vos réponses.

    Le problème c'est qu'il n y a pas de contraintes dans la base de données sur laquelle je souhaiterai afficher des clés primaires potentielles.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    C'est plutôt trouver les clés candidates ou potentielles d'être des clés primaires.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    S'il n'y a pas de contrainte sur la base de données, outre que c'est une hérésie d'un point de vue intégrité des données, ça rend surtout la recherche des clefs primaires potentielles impossible.
    Une PK est par définition unique et not null, faute de contrainte, comment allez vous vérifier l'unicité ?

    EDIT : ah si, en recherchant la présence d'un index unique... possible mais pas top

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Points : 58
    Points
    58
    Par défaut
    Merci pour votre message.

    Je pensais parcourir les données ligne par ligne avec une combinaison de colonnes pour déterminer les colonnes potentielles.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Je vous suggère d'aller à la pêche au thon, à la chasse au sanglier ou à la cueillette des girolles. ça prendra moins de temps et ce sera plus profitable !

    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/ * * * * *

Discussions similaires

  1. Retrouver les clés étrangères d'une base de données
    Par fernando60 dans le forum Débuter
    Réponses: 2
    Dernier message: 13/09/2012, 17h08
  2. savoir les clés primaires d'une table
    Par hamdani dans le forum Administration
    Réponses: 6
    Dernier message: 21/05/2007, 16h54
  3. Les trous dans les clés primaires d'une base de données ?
    Par dymezac dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 27/09/2006, 09h22
  4. Réponses: 2
    Dernier message: 08/06/2006, 17h42
  5. Réponses: 1
    Dernier message: 23/10/2005, 00h55

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