Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble
des tables de ma base de données
une requete entre Sysobjects et sysforeignkeys me permet d'identifier les
relations entre les tables, mais je n'arrive pas à trouver la table système
qui expose les colones utiliséses dans ces relations. A moins qu'il n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ?
J'en sais rien.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent Moreau
Voir aide en ligne de: syscontrains
Laurent.
"Pierre" wrote in message news:
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble des tables de ma base de données une requete entre Sysobjects et sysforeignkeys me permet d'identifier les relations entre les tables, mais je n'arrive pas à trouver la table
système
qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ? J'en sais rien.
Help Please. Thank.
Voir aide en ligne de:
syscontrains
Laurent.
"Pierre" <Pierre@discussions.microsoft.com> wrote in message
news:3D053C47-DC14-4CCC-B8E6-4322A24C007D@microsoft.com...
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble
des tables de ma base de données
une requete entre Sysobjects et sysforeignkeys me permet d'identifier les
relations entre les tables, mais je n'arrive pas à trouver la table
système
qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ?
J'en sais rien.
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble des tables de ma base de données une requete entre Sysobjects et sysforeignkeys me permet d'identifier les relations entre les tables, mais je n'arrive pas à trouver la table
système
qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ? J'en sais rien.
Help Please. Thank.
Synopsis
Il faut passer par la table sysreferences. Malheureusement on a une disposition de l'information en ligne...
Les relations entre les tables systèmes :
sysreferences.fkeyid = sysobjects.id --> table qui contient la clef étrangère sysreferences.rkeyid = sysobjects.id --> table référente
Pour une clef étrangèe, on fait correspondre un champ de la table avec un champ de la table référente :
sysreferences.Fkeyid=syscolumns.id AND sysreferences.Fkey1=syscolumns.colId Cette relation va donner le "ChampX" de "maTable" de l'égalité [I]
sysreferences.Rkeyid=syscolumns.id AND sysreferences.Rkey1=syscolumns.colId Cette relation va donner le "ChampA" de "maTableReferente" de l'égalité [I]
Avec cette double jointure, on retrouve les champs qui sont en correspondances de la première égalité.
Il faut procéder autant de fois qu'au nombre de degré de la jointure !!! (à cause de la disposition en ligne, de la description des relations...)
Visiblement SQL server accepte au maximun des jointures à 16 relations.
Je n'ai pas trouvé d'autres solutions que d'utiliser l'opérateur UNION
================================= select a.id , a.name , c.name 'Table' , d.name 'ReferenceTable' , e.name 'Column' , f.name 'ReferenceColumn' from sysobjects a join sysreferences b on (a.id=b.constid) join sysobjects c on (c.id=b.fkeyid) join sysobjects d on (d.id=b.rkeyid) join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey1) join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey1) UNION select a.id , a.name , c.name 'Table' , d.name 'ReferenceTable' , e.name 'Column' , f.name 'ReferenceColumn' from sysobjects a join sysreferences b on (a.id=b.constid) join sysobjects c on (c.id=b.fkeyid) join sysobjects d on (d.id=b.rkeyid) join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey2) join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey2) UNION select a.id , a.name , c.name 'Table' , d.name 'ReferenceTable' , e.name 'Column' , f.name 'ReferenceColumn' from sysobjects a join sysreferences b on (a.id=b.constid) join sysobjects c on (c.id=b.fkeyid) join sysobjects d on (d.id=b.rkeyid) join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey3) join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey3) [....] X16 Order By 1
=====================//
C'est effectivement laborieux.
Sinon il y a toujours la procédure stockée SP_HELP maTable
declare myCursor cursor for select name from sysobjects where type='U'
.... While ... Begin Exec('sp_help'+nomTable) fetch myCursor ... End ....
"Pierre" a écrit dans le message de news:
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble des tables de ma base de données une requete entre Sysobjects et sysforeignkeys me permet d'identifier les relations entre les tables, mais je n'arrive pas à trouver la table
système
qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ? J'en sais rien.
Help Please. Thank.
Il faut passer par la table sysreferences.
Malheureusement on a une disposition de l'information en ligne...
Les relations entre les tables systèmes :
sysreferences.fkeyid = sysobjects.id --> table qui contient la clef
étrangère
sysreferences.rkeyid = sysobjects.id --> table référente
Pour une clef étrangèe, on fait correspondre un champ
de la table avec un champ de la table référente :
sysreferences.Fkeyid=syscolumns.id AND sysreferences.Fkey1=syscolumns.colId
Cette relation va donner le "ChampX" de "maTable" de l'égalité [I]
sysreferences.Rkeyid=syscolumns.id AND sysreferences.Rkey1=syscolumns.colId
Cette relation va donner le "ChampA" de "maTableReferente" de l'égalité [I]
Avec cette double jointure, on retrouve les champs qui sont en
correspondances de la première
égalité.
Il faut procéder autant de fois qu'au nombre de degré de la jointure !!!
(à cause de la disposition en ligne, de la description des relations...)
Visiblement SQL server accepte au maximun des jointures à 16 relations.
Je n'ai pas trouvé d'autres solutions que d'utiliser l'opérateur UNION
\=================================
select
a.id
, a.name
, c.name 'Table'
, d.name 'ReferenceTable'
, e.name 'Column'
, f.name 'ReferenceColumn'
from sysobjects a
join sysreferences b on (a.id=b.constid)
join sysobjects c on (c.id=b.fkeyid)
join sysobjects d on (d.id=b.rkeyid)
join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey1)
join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey1)
UNION
select
a.id
, a.name
, c.name 'Table'
, d.name 'ReferenceTable'
, e.name 'Column'
, f.name 'ReferenceColumn'
from sysobjects a
join sysreferences b on (a.id=b.constid)
join sysobjects c on (c.id=b.fkeyid)
join sysobjects d on (d.id=b.rkeyid)
join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey2)
join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey2)
UNION
select
a.id
, a.name
, c.name 'Table'
, d.name 'ReferenceTable'
, e.name 'Column'
, f.name 'ReferenceColumn'
from sysobjects a
join sysreferences b on (a.id=b.constid)
join sysobjects c on (c.id=b.fkeyid)
join sysobjects d on (d.id=b.rkeyid)
join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey3)
join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey3)
[....] X16
Order By 1
=====================//
C'est effectivement laborieux.
Sinon il y a toujours la procédure stockée SP_HELP maTable
declare myCursor cursor for
select name
from sysobjects
where type='U'
....
While ...
Begin
Exec('sp_help'+nomTable)
fetch myCursor ...
End
....
"Pierre" <Pierre@discussions.microsoft.com> a écrit dans le message de
news:3D053C47-DC14-4CCC-B8E6-4322A24C007D@microsoft.com...
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble
des tables de ma base de données
une requete entre Sysobjects et sysforeignkeys me permet d'identifier les
relations entre les tables, mais je n'arrive pas à trouver la table
système
qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ?
J'en sais rien.
sysreferences.Fkeyid=syscolumns.id AND sysreferences.Fkey1=syscolumns.colId Cette relation va donner le "ChampX" de "maTable" de l'égalité [I]
sysreferences.Rkeyid=syscolumns.id AND sysreferences.Rkey1=syscolumns.colId Cette relation va donner le "ChampA" de "maTableReferente" de l'égalité [I]
Avec cette double jointure, on retrouve les champs qui sont en correspondances de la première égalité.
Il faut procéder autant de fois qu'au nombre de degré de la jointure !!! (à cause de la disposition en ligne, de la description des relations...)
Visiblement SQL server accepte au maximun des jointures à 16 relations.
Je n'ai pas trouvé d'autres solutions que d'utiliser l'opérateur UNION
================================= select a.id , a.name , c.name 'Table' , d.name 'ReferenceTable' , e.name 'Column' , f.name 'ReferenceColumn' from sysobjects a join sysreferences b on (a.id=b.constid) join sysobjects c on (c.id=b.fkeyid) join sysobjects d on (d.id=b.rkeyid) join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey1) join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey1) UNION select a.id , a.name , c.name 'Table' , d.name 'ReferenceTable' , e.name 'Column' , f.name 'ReferenceColumn' from sysobjects a join sysreferences b on (a.id=b.constid) join sysobjects c on (c.id=b.fkeyid) join sysobjects d on (d.id=b.rkeyid) join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey2) join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey2) UNION select a.id , a.name , c.name 'Table' , d.name 'ReferenceTable' , e.name 'Column' , f.name 'ReferenceColumn' from sysobjects a join sysreferences b on (a.id=b.constid) join sysobjects c on (c.id=b.fkeyid) join sysobjects d on (d.id=b.rkeyid) join syscolumns e on (e.id=b.fkeyid and e.colid=b.fkey3) join syscolumns f on (f.id=b.rkeyid and f.colid=b.rkey3) [....] X16 Order By 1
=====================//
C'est effectivement laborieux.
Sinon il y a toujours la procédure stockée SP_HELP maTable
declare myCursor cursor for select name from sysobjects where type='U'
.... While ... Begin Exec('sp_help'+nomTable) fetch myCursor ... End ....
"Pierre" a écrit dans le message de news:
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble des tables de ma base de données une requete entre Sysobjects et sysforeignkeys me permet d'identifier les relations entre les tables, mais je n'arrive pas à trouver la table
système
qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ? J'en sais rien.
Help Please. Thank.
Pierre
Merci c'est OK
"Laurent Moreau" a écrit :
Voir aide en ligne de: syscontrains
Laurent.
"Pierre" wrote in message news: > Bonjour, > > Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble > des tables de ma base de données > une requete entre Sysobjects et sysforeignkeys me permet d'identifier les > relations entre les tables, mais je n'arrive pas à trouver la table système > qui expose les colones utiliséses dans ces relations. A moins qu'il n'existe > un identificateur de clé (primaire ou étrangère) dans syscolumns ? > J'en sais rien. > > Help Please. > Thank.
Merci c'est OK
"Laurent Moreau" a écrit :
Voir aide en ligne de:
syscontrains
Laurent.
"Pierre" <Pierre@discussions.microsoft.com> wrote in message
news:3D053C47-DC14-4CCC-B8E6-4322A24C007D@microsoft.com...
> Bonjour,
>
> Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble
> des tables de ma base de données
> une requete entre Sysobjects et sysforeignkeys me permet d'identifier les
> relations entre les tables, mais je n'arrive pas à trouver la table
système
> qui expose les colones utiliséses dans ces relations. A moins qu'il
n'existe
> un identificateur de clé (primaire ou étrangère) dans syscolumns ?
> J'en sais rien.
>
> Help Please.
> Thank.
"Pierre" wrote in message news: > Bonjour, > > Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble > des tables de ma base de données > une requete entre Sysobjects et sysforeignkeys me permet d'identifier les > relations entre les tables, mais je n'arrive pas à trouver la table système > qui expose les colones utiliséses dans ces relations. A moins qu'il n'existe > un identificateur de clé (primaire ou étrangère) dans syscolumns ? > J'en sais rien. > > Help Please. > Thank.
Fred BROUARD
bonjour,
il vaut mieux ne JAMAIS passer pas les tables systèmes du SGBDR. Ces tables peuvent être modifiées sans préavis par l'éditeur puisqu'elles sont réservées à un usage interne. Cela a d'ailleurs été le cas entre la v7 et la v2000, des modifications ont eût lieu dans les tables systèmes !
En revanche la norme SQL propose des vues permettant d'interroger la base sur tous ce que l'on veut à l'exception de l'aspect "physique" des bases (fichiers et index par exemple).
Donc, pour ton information, utiliser : INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS => nom et option des contraintes INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE => colonnes en jeu dans une contrainte.
A lire sur le sujet : http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA9
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 ************************ www.datasapiens.com *************************
Pierre a écrit:
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble des tables de ma base de données une requete entre Sysobjects et sysforeignkeys me permet d'identifier les relations entre les tables, mais je n'arrive pas à trouver la table système qui expose les colones utiliséses dans ces relations. A moins qu'il n'existe un identificateur de clé (primaire ou étrangère) dans syscolumns ? J'en sais rien.
Help Please. Thank.
bonjour,
il vaut mieux ne JAMAIS passer pas les tables systèmes du SGBDR. Ces tables
peuvent être modifiées sans préavis par l'éditeur puisqu'elles sont réservées à
un usage interne.
Cela a d'ailleurs été le cas entre la v7 et la v2000, des modifications ont eût
lieu dans les tables systèmes !
En revanche la norme SQL propose des vues permettant d'interroger la base sur
tous ce que l'on veut à l'exception de l'aspect "physique" des bases (fichiers
et index par exemple).
Donc, pour ton information, utiliser :
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS => nom et option des contraintes
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE => colonnes en jeu dans une contrainte.
A lire sur le sujet :
http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA9
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Pierre a écrit:
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble
des tables de ma base de données
une requete entre Sysobjects et sysforeignkeys me permet d'identifier les
relations entre les tables, mais je n'arrive pas à trouver la table système
qui expose les colones utiliséses dans ces relations. A moins qu'il n'existe
un identificateur de clé (primaire ou étrangère) dans syscolumns ?
J'en sais rien.
il vaut mieux ne JAMAIS passer pas les tables systèmes du SGBDR. Ces tables peuvent être modifiées sans préavis par l'éditeur puisqu'elles sont réservées à un usage interne. Cela a d'ailleurs été le cas entre la v7 et la v2000, des modifications ont eût lieu dans les tables systèmes !
En revanche la norme SQL propose des vues permettant d'interroger la base sur tous ce que l'on veut à l'exception de l'aspect "physique" des bases (fichiers et index par exemple).
Donc, pour ton information, utiliser : INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS => nom et option des contraintes INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE => colonnes en jeu dans une contrainte.
A lire sur le sujet : http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA9
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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 ************************ www.datasapiens.com *************************
Pierre a écrit:
Bonjour,
Je souhaite identifier les colonnes PrimaryKey et ForeignKey de l'ensemble des tables de ma base de données une requete entre Sysobjects et sysforeignkeys me permet d'identifier les relations entre les tables, mais je n'arrive pas à trouver la table système qui expose les colones utiliséses dans ces relations. A moins qu'il n'existe un identificateur de clé (primaire ou étrangère) dans syscolumns ? J'en sais rien.