Lecture des clés primaires de toutes les tables

Le
MM
Bonjour,

Je souhaite récupérer les nom et type des champs qui constituent les clés
primaires des tables d'une base de données.
J'ai trouvé dans l'aide la procédure sp_pkeys mais elle prends en paramètres
le nom de la tableor je voudrais exécuter celà pour toutes les tables.
J'ai donc songer à faire un curseur (c'est mal je sais ;-)) qui bouclerai
sur les tables et qui appelerai à chaque itération la procédure sp_pkeys

Deux inconvénients ressortent cependant de cette méthode :
- L'utilisation d'un curseur.
- Et surtout le renvoi de resultsets multiples.

Quelqu'un connait t-il une solution ?
J'ai cherché à exploiter les tables sysindexes et sysconstraints, ainsi que
la table sysobjects via un filtre sur xtype='PK' mais pour l'instant sans
succès

Merci par avance,

  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Med Bouchenafa[MVP]
Le #11760791
SELECT K.Table_Name, K.Column_Name
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
ON C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE ='PRIMARY KEY'

--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"MM" news:#
Bonjour,

Je souhaite récupérer les nom et type des champs qui constituent les clés
primaires des tables d'une base de données.
J'ai trouvé dans l'aide la procédure sp_pkeys mais elle prends en


paramètres
le nom de la table...or je voudrais exécuter celà pour toutes les tables.
J'ai donc songer à faire un curseur (c'est mal je sais ;-)) qui bouclerai
sur les tables et qui appelerai à chaque itération la procédure


sp_pkeys...

Deux inconvénients ressortent cependant de cette méthode :
- L'utilisation d'un curseur.
- Et surtout le renvoi de resultsets multiples.

Quelqu'un connait t-il une solution ?
J'ai cherché à exploiter les tables sysindexes et sysconstraints, ainsi


que
la table sysobjects via un filtre sur xtype='PK' mais pour l'instant sans
succès...

Merci par avance,




MM
Le #11760751
Merci beaucoup pour votre réponse très rapide et pertinente ;-)

Avez un conseil à me faire vis à vis de la méthode d'accès aux informations
concernant le schéma ?
Vaut-il mieux utiliser INFORMATION_SCHEMA ou les tables systèmes ?
Et si possible pouvez-vous justifier en deux mots votre préconisation ?

Cordialement,
MM.


"Med Bouchenafa[MVP]" news:#
SELECT K.Table_Name, K.Column_Name
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
ON C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE ='PRIMARY KEY'

--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"MM" news:#
> Bonjour,
>
> Je souhaite récupérer les nom et type des champs qui constituent les


clés
> primaires des tables d'une base de données.
> J'ai trouvé dans l'aide la procédure sp_pkeys mais elle prends en
paramètres
> le nom de la table...or je voudrais exécuter celà pour toutes les


tables.
> J'ai donc songer à faire un curseur (c'est mal je sais ;-)) qui


bouclerai
> sur les tables et qui appelerai à chaque itération la procédure
sp_pkeys...
>
> Deux inconvénients ressortent cependant de cette méthode :
> - L'utilisation d'un curseur.
> - Et surtout le renvoi de resultsets multiples.
>
> Quelqu'un connait t-il une solution ?
> J'ai cherché à exploiter les tables sysindexes et sysconstraints, ainsi
que
> la table sysobjects via un filtre sur xtype='PK' mais pour l'instant


sans
> succès...
>
> Merci par avance,
>
>




MM
Le #11760741
Ok je me reponds a moi même après avoir trouver l'info...

En résumé :
Il vaut mieux utiliser les vues car elles abstraient les tables systèmes et
resteront stables contrairement aux tables systèmes qui sont susceptibles
d'évoluer.

En détail :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ia-iz_4pbn.asp

"MM" news:#
Merci beaucoup pour votre réponse très rapide et pertinente ;-)

Avez un conseil à me faire vis à vis de la méthode d'accès aux


informations
concernant le schéma ?
Vaut-il mieux utiliser INFORMATION_SCHEMA ou les tables systèmes ?
Et si possible pouvez-vous justifier en deux mots votre préconisation ?

Cordialement,
MM.


"Med Bouchenafa[MVP]" news:#
> SELECT K.Table_Name, K.Column_Name
> FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
> INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
> ON C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
> WHERE C.CONSTRAINT_TYPE ='PRIMARY KEY'
>
> --
> Bien cordialement
> Med Bouchenafa
> TETRASET
> 75015 Paris
> "MM" > news:#
> > Bonjour,
> >
> > Je souhaite récupérer les nom et type des champs qui constituent les
clés
> > primaires des tables d'une base de données.
> > J'ai trouvé dans l'aide la procédure sp_pkeys mais elle prends en
> paramètres
> > le nom de la table...or je voudrais exécuter celà pour toutes les
tables.
> > J'ai donc songer à faire un curseur (c'est mal je sais ;-)) qui
bouclerai
> > sur les tables et qui appelerai à chaque itération la procédure
> sp_pkeys...
> >
> > Deux inconvénients ressortent cependant de cette méthode :
> > - L'utilisation d'un curseur.
> > - Et surtout le renvoi de resultsets multiples.
> >
> > Quelqu'un connait t-il une solution ?
> > J'ai cherché à exploiter les tables sysindexes et sysconstraints,


ainsi
> que
> > la table sysobjects via un filtre sur xtype='PK' mais pour l'instant
sans
> > succès...
> >
> > Merci par avance,
> >
> >
>
>




Fred BROUARD
Le #11760731
A lire :
http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA9

A +



--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
MM a écrit:
Ok je me reponds a moi même après avoir trouver l'info...

En résumé :
Il vaut mieux utiliser les vues car elles abstraient les tables systèmes et
resteront stables contrairement aux tables systèmes qui sont susceptibles
d'évoluer.

En détail :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ia-iz_4pbn.asp

"MM" news:#

Merci beaucoup pour votre réponse très rapide et pertinente ;-)

Avez un conseil à me faire vis à vis de la méthode d'accès aux



informations

concernant le schéma ?
Vaut-il mieux utiliser INFORMATION_SCHEMA ou les tables systèmes ?
Et si possible pouvez-vous justifier en deux mots votre préconisation ?

Cordialement,
MM.


"Med Bouchenafa[MVP]" news:#

SELECT K.Table_Name, K.Column_Name
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
ON C.CONSTRAINT_NAME = K.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE ='PRIMARY KEY'

--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"MM" news:#

Bonjour,

Je souhaite récupérer les nom et type des champs qui constituent les





clés

primaires des tables d'une base de données.
J'ai trouvé dans l'aide la procédure sp_pkeys mais elle prends en



paramètres

le nom de la table...or je voudrais exécuter celà pour toutes les





tables.

J'ai donc songer à faire un curseur (c'est mal je sais ;-)) qui





bouclerai

sur les tables et qui appelerai à chaque itération la procédure



sp_pkeys...

Deux inconvénients ressortent cependant de cette méthode :
- L'utilisation d'un curseur.
- Et surtout le renvoi de resultsets multiples.

Quelqu'un connait t-il une solution ?
J'ai cherché à exploiter les tables sysindexes et sysconstraints,







ainsi

que

la table sysobjects via un filtre sur xtype='PK' mais pour l'instant





sans

succès...

Merci par avance,















Poster une réponse
Anonyme