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

MS SQL Server Discussion :

Comment reconnaitre une clé primaire sans Syscolumn


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut Comment reconnaitre une clé primaire sans Syscolumn
    Salut à tous. Voila, je dois faire une requete qui me permettent de récupérer les clé primaires d'un table.

    Jusque la, j'utilisais SQL Server 2000 et le champs xoffset de la table syscolumn. Si c'était a 4, alors il s'agissait d'une clé primaire...

    Mais le serveur a été migrer en 2k5 et bien évidement, ca ne fonctionne plus du tout. J'ai essayer de regarder les champs de syscolumn mais aucun ne semble définir le fait que ce soit une des clés primaires...

    Est ce que quelqu'un pourrait m'aider la dessus ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Merci beaucoup.

    Ce n'est pas tout a fait ce que je cherche (la c'est la liste des contraintes, pas des clé primaires) mais ca me fait une tres bonne piste ou chercher.

    Je ne connaissais pas du tout INFORMATION_SCHEMA. Merci beaucoup

    [EDIT]

    Et voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
    WHERE TABLE_NAME = 'ma_table'
    Encore merci

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Une clé primaire est une contrainte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
    ORDER BY TABLE_NAME
    EDIT : En effet, si tu veux les COLONNES de la clé primaire, et pas la clé elle-même, c'est mieux ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS c
    JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE co ON c.CONSTRAINT_NAME = co.CONSTRAINT_NAME
    WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
    ORDER BY c.TABLE_NAME

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Effectivement, toutes les contraintes ne sont pas des clés primaires :p

    Par contre, il y a des droits particulier a mettre a l'utilisateur ?

    Parce que j'execute ma requete en SA, je recois le bon résultat, je le fais avec un utilisateur qui a SELECT, UPDATE, INSERT, DELETE, CONNECT et je ne recois rien...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Depuis des lustres MS indique clairement dans l'aide en ligne qu'il ne faut pas utiliser les tables systèmes pour des besoins applicatifs !

    Vous disposez en revanche des outils suivants :
    - vues d'information de schéma (norme SQL)
    - procédures de méta données
    - fonctions de méta données
    ...

    qui elles sont gartanties d'une version à l'autre.

    En l'occurence, trouver les clefs primaires d'une table est d'une simplicité enfantine dans la vue INFORMATION_SCHEMA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT COLUMN_NAME 
     
    FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
           INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
                 ON TC.CONSTRAINT_SCHEMA = KCU.CONSTRAINT_SCHEMA 
                   AND TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME
     
    WHERE  CONSTRAINT_TYPE = 'PRIMARY KEY'
      AND  TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME = 'Person.Address'

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

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    erreur interne !
    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/ * * * * *

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Merci beaucoup...........

    Sinon le probleme était que l'on ne peut pas définir de droit sur ces vues systemes.
    Résolu en passant par une procédure stockée.

    Encore merci rudib

    Et SQLPro... Merci de ta.... Non même pas en fait, désolé mais je n'apprécie pas de me faire sauter dessus comme ca alors que le problème était résolu. Et je ne suis ni un admin BDD ni un expert SQL Server. Je n'étais donc pas forcement au courant qu'il fallait éviter les tables système...

    Sur ce, Bye.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/11/2007, 12h45
  2. Réponses: 3
    Dernier message: 04/05/2006, 14h59
  3. Comment utiliser une BDD GDB sans installer interbase ?
    Par QAYS dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/05/2006, 15h31
  4. Réponses: 1
    Dernier message: 11/04/2005, 09h59
  5. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06

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