Bonjour à tous,
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste
de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
Merci d'avance
Laurent
Bonjour à tous,
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste
de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
Merci d'avance
Laurent
Bonjour à tous,
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste
de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
Merci d'avance
Laurent
Bonjour Laurent, Get this :
Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
WHERE O.id = C.id AND
C.xtype = T.xtype AND
T.xtype IN (175, 239, 167) AND
((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
(O.id= PFK.rkeyid AND C.colid=1))
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
Bonjour Laurent, Get this :
Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
WHERE O.id = C.id AND
C.xtype = T.xtype AND
T.xtype IN (175, 239, 167) AND
((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
(O.id= PFK.rkeyid AND C.colid=1))
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
Bonjour Laurent, Get this :
Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
WHERE O.id = C.id AND
C.xtype = T.xtype AND
T.xtype IN (175, 239, 167) AND
((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
(O.id= PFK.rkeyid AND C.colid=1))
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
Bonjour
Fred.M. a écrit :
> Bonjour Laurent, Get this :
>
> Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
> From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
> WHERE O.id = C.id AND
> C.xtype = T.xtype AND
> T.xtype IN (175, 239, 167) AND
> ((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
> (O.id= PFK.rkeyid AND C.colid=1))
Quelle horeur !!! ;-)
Ne JAMAIS utiliser les tables systèmes. En effet MS se réserve le droit
de les modifier sans préavis.
Utilisez les vues d'information de schéma (norme SQL), les procédures
stockées système ou encore les vues de management (2005), mais évitez
TOUJOURS si possible l'accès direct aux tabkles système.
De plus faites vos jointures dans une clause FROM et pas dans le where !
Voici donc une version correcte :
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
ON CCU.TABLE_CATALOG = C.TABLE_CATALOG
AND CCU.TABLE_SCHEMA = C.TABLE_SCHEMA
AND CCU.TABLE_NAME = C.TABLE_NAME
AND CCU.COLUMN_NAME = C.COLUMN_NAME
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND DATA_TYPE LIKE '%char%'
AND TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME <> 'dbo.dtproperties'
A +
>> je cherche comment faire un script qui me donnerai sur une base sql 2000, la
>> liste de toutes les tables possédant des clés primaires ou étrangère de type
>> varchar ou char avec les noms de champs
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour
Fred.M. a écrit :
> Bonjour Laurent, Get this :
>
> Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
> From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
> WHERE O.id = C.id AND
> C.xtype = T.xtype AND
> T.xtype IN (175, 239, 167) AND
> ((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
> (O.id= PFK.rkeyid AND C.colid=1))
Quelle horeur !!! ;-)
Ne JAMAIS utiliser les tables systèmes. En effet MS se réserve le droit
de les modifier sans préavis.
Utilisez les vues d'information de schéma (norme SQL), les procédures
stockées système ou encore les vues de management (2005), mais évitez
TOUJOURS si possible l'accès direct aux tabkles système.
De plus faites vos jointures dans une clause FROM et pas dans le where !
Voici donc une version correcte :
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
ON CCU.TABLE_CATALOG = C.TABLE_CATALOG
AND CCU.TABLE_SCHEMA = C.TABLE_SCHEMA
AND CCU.TABLE_NAME = C.TABLE_NAME
AND CCU.COLUMN_NAME = C.COLUMN_NAME
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND DATA_TYPE LIKE '%char%'
AND TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME <> 'dbo.dtproperties'
A +
>> je cherche comment faire un script qui me donnerai sur une base sql 2000, la
>> liste de toutes les tables possédant des clés primaires ou étrangère de type
>> varchar ou char avec les noms de champs
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour
Fred.M. a écrit :
> Bonjour Laurent, Get this :
>
> Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
> From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
> WHERE O.id = C.id AND
> C.xtype = T.xtype AND
> T.xtype IN (175, 239, 167) AND
> ((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
> (O.id= PFK.rkeyid AND C.colid=1))
Quelle horeur !!! ;-)
Ne JAMAIS utiliser les tables systèmes. En effet MS se réserve le droit
de les modifier sans préavis.
Utilisez les vues d'information de schéma (norme SQL), les procédures
stockées système ou encore les vues de management (2005), mais évitez
TOUJOURS si possible l'accès direct aux tabkles système.
De plus faites vos jointures dans une clause FROM et pas dans le where !
Voici donc une version correcte :
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
ON CCU.TABLE_CATALOG = C.TABLE_CATALOG
AND CCU.TABLE_SCHEMA = C.TABLE_SCHEMA
AND CCU.TABLE_NAME = C.TABLE_NAME
AND CCU.COLUMN_NAME = C.COLUMN_NAME
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND DATA_TYPE LIKE '%char%'
AND TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME <> 'dbo.dtproperties'
A +
>> je cherche comment faire un script qui me donnerai sur une base sql 2000, la
>> liste de toutes les tables possédant des clés primaires ou étrangère de type
>> varchar ou char avec les noms de champs
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
Je me permets de rebondir sur ces propos plein de dogmatisme que j'ai bien
vu par ailleurs. En tant moi même qu'ancien MCT pendant 6 ans, je connais
bien ce genre de discours Proutproutiste qui conviennent à ce que "c'est pas
comme ça qon fait, c'est écrit autrement dans les bouquins".
- Les modifications de tables system sont identiables au sein des différents
fix et autres services packs.
- A part pour faire "puriste", les jointures en clause WHERE sont normés
ANSI 92 donc pas de contrindications réelles (execute une même requête en
jointure INNER JOIN puis en clause WHERE, et tu observeras que le plan
d'exécution et tes IOs seront identiques !). Et si je suis passé par une
clause WHERE, c'est tout simplement à cause de l'opérateur OR.
- J'ai la chance d'avoir 4 collaborateurs qui sont directement de chez Ms,
et je ne leur casse jamais les pieds en leur disant "rhôô ton script il est
pas beau, t'as pas le droit de référencer une table system".
- Les Vues d'information de schema ne sont pas aussi riches et exhaustives
que les données system (même si pour cet exemple elles en conviennent).
- Oui en revanche pour les vues managées pour la version 2005.
- Enfin si je lis ta requête, elle ne remonte que les cas concernant les Clé
primaires uniquement alors que Laurent pose la question sur les clés
étrangères également.
Cordialement tout ça tout ça...,
Fred.M.
(non je ne ferai pas ici l'étalage de mon CV)
"Fred BROUARD" a écrit :Bonjour
Fred.M. a écrit :Bonjour Laurent, Get this :
Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
WHERE O.id = C.id AND
C.xtype = T.xtype AND
T.xtype IN (175, 239, 167) AND
((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
(O.id= PFK.rkeyid AND C.colid=1))
Quelle horeur !!! ;-)
Ne JAMAIS utiliser les tables systèmes. En effet MS se réserve le droit
de les modifier sans préavis.
Utilisez les vues d'information de schéma (norme SQL), les procédures
stockées système ou encore les vues de management (2005), mais évitez
TOUJOURS si possible l'accès direct aux tabkles système.
De plus faites vos jointures dans une clause FROM et pas dans le where !
Voici donc une version correcte :
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
ON CCU.TABLE_CATALOG = C.TABLE_CATALOG
AND CCU.TABLE_SCHEMA = C.TABLE_SCHEMA
AND CCU.TABLE_NAME = C.TABLE_NAME
AND CCU.COLUMN_NAME = C.COLUMN_NAME
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND DATA_TYPE LIKE '%char%'
AND TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME <> 'dbo.dtproperties'
A +je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
Je me permets de rebondir sur ces propos plein de dogmatisme que j'ai bien
vu par ailleurs. En tant moi même qu'ancien MCT pendant 6 ans, je connais
bien ce genre de discours Proutproutiste qui conviennent à ce que "c'est pas
comme ça qon fait, c'est écrit autrement dans les bouquins".
- Les modifications de tables system sont identiables au sein des différents
fix et autres services packs.
- A part pour faire "puriste", les jointures en clause WHERE sont normés
ANSI 92 donc pas de contrindications réelles (execute une même requête en
jointure INNER JOIN puis en clause WHERE, et tu observeras que le plan
d'exécution et tes IOs seront identiques !). Et si je suis passé par une
clause WHERE, c'est tout simplement à cause de l'opérateur OR.
- J'ai la chance d'avoir 4 collaborateurs qui sont directement de chez Ms,
et je ne leur casse jamais les pieds en leur disant "rhôô ton script il est
pas beau, t'as pas le droit de référencer une table system".
- Les Vues d'information de schema ne sont pas aussi riches et exhaustives
que les données system (même si pour cet exemple elles en conviennent).
- Oui en revanche pour les vues managées pour la version 2005.
- Enfin si je lis ta requête, elle ne remonte que les cas concernant les Clé
primaires uniquement alors que Laurent pose la question sur les clés
étrangères également.
Cordialement tout ça tout ça...,
Fred.M.
(non je ne ferai pas ici l'étalage de mon CV)
"Fred BROUARD" a écrit :
Bonjour
Fred.M. a écrit :
Bonjour Laurent, Get this :
Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
WHERE O.id = C.id AND
C.xtype = T.xtype AND
T.xtype IN (175, 239, 167) AND
((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
(O.id= PFK.rkeyid AND C.colid=1))
Quelle horeur !!! ;-)
Ne JAMAIS utiliser les tables systèmes. En effet MS se réserve le droit
de les modifier sans préavis.
Utilisez les vues d'information de schéma (norme SQL), les procédures
stockées système ou encore les vues de management (2005), mais évitez
TOUJOURS si possible l'accès direct aux tabkles système.
De plus faites vos jointures dans une clause FROM et pas dans le where !
Voici donc une version correcte :
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
ON CCU.TABLE_CATALOG = C.TABLE_CATALOG
AND CCU.TABLE_SCHEMA = C.TABLE_SCHEMA
AND CCU.TABLE_NAME = C.TABLE_NAME
AND CCU.COLUMN_NAME = C.COLUMN_NAME
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND DATA_TYPE LIKE '%char%'
AND TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME <> 'dbo.dtproperties'
A +
je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjour,
Je me permets de rebondir sur ces propos plein de dogmatisme que j'ai bien
vu par ailleurs. En tant moi même qu'ancien MCT pendant 6 ans, je connais
bien ce genre de discours Proutproutiste qui conviennent à ce que "c'est pas
comme ça qon fait, c'est écrit autrement dans les bouquins".
- Les modifications de tables system sont identiables au sein des différents
fix et autres services packs.
- A part pour faire "puriste", les jointures en clause WHERE sont normés
ANSI 92 donc pas de contrindications réelles (execute une même requête en
jointure INNER JOIN puis en clause WHERE, et tu observeras que le plan
d'exécution et tes IOs seront identiques !). Et si je suis passé par une
clause WHERE, c'est tout simplement à cause de l'opérateur OR.
- J'ai la chance d'avoir 4 collaborateurs qui sont directement de chez Ms,
et je ne leur casse jamais les pieds en leur disant "rhôô ton script il est
pas beau, t'as pas le droit de référencer une table system".
- Les Vues d'information de schema ne sont pas aussi riches et exhaustives
que les données system (même si pour cet exemple elles en conviennent).
- Oui en revanche pour les vues managées pour la version 2005.
- Enfin si je lis ta requête, elle ne remonte que les cas concernant les Clé
primaires uniquement alors que Laurent pose la question sur les clés
étrangères également.
Cordialement tout ça tout ça...,
Fred.M.
(non je ne ferai pas ici l'étalage de mon CV)
"Fred BROUARD" a écrit :Bonjour
Fred.M. a écrit :Bonjour Laurent, Get this :
Select DISTINCT O.name as "Table", C.name as Champ, T.name as Type
From sysobjects O, syscolumns C, systypes T, sysforeignkeys PFK
WHERE O.id = C.id AND
C.xtype = T.xtype AND
T.xtype IN (175, 239, 167) AND
((O.id = PFK.fkeyid AND C.colid = PFK.fkey) OR
(O.id= PFK.rkeyid AND C.colid=1))
Quelle horeur !!! ;-)
Ne JAMAIS utiliser les tables systèmes. En effet MS se réserve le droit
de les modifier sans préavis.
Utilisez les vues d'information de schéma (norme SQL), les procédures
stockées système ou encore les vues de management (2005), mais évitez
TOUJOURS si possible l'accès direct aux tabkles système.
De plus faites vos jointures dans une clause FROM et pas dans le where !
Voici donc une version correcte :
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
ON TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
AND TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
AND TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
ON CCU.TABLE_CATALOG = C.TABLE_CATALOG
AND CCU.TABLE_SCHEMA = C.TABLE_SCHEMA
AND CCU.TABLE_NAME = C.TABLE_NAME
AND CCU.COLUMN_NAME = C.COLUMN_NAME
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
AND DATA_TYPE LIKE '%char%'
AND TC.TABLE_SCHEMA + '.' + TC.TABLE_NAME <> 'dbo.dtproperties'
A +je cherche comment faire un script qui me donnerai sur une base sql 2000, la
liste de toutes les tables possédant des clés primaires ou étrangère de type
varchar ou char avec les noms de champs
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************