Répertorier les vues qui font références à un champ d'une table
4 réponses
Jean-Yves
Bonjour à tous ,
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues
qui font références à un champ particulier d'une table .
Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que
la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
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
Fred BROUARD
Jean-Yves a écrit :
Bonjour à tous ,
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues qui font références à un champ particulier d'une table . Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
Comment puis-je faire une telle reqête ?
Merci d'avance
select * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_TYPE = 'VIEW'
A +
-- 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.sqlspot.com *************************
Jean-Yves a écrit :
Bonjour à tous ,
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues
qui font références à un champ particulier d'une table .
Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que
la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
Comment puis-je faire une telle reqête ?
Merci d'avance
select * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_TYPE = 'VIEW'
A +
--
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.sqlspot.com *************************
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues qui font références à un champ particulier d'une table . Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
Comment puis-je faire une telle reqête ?
Merci d'avance
select * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_TYPE = 'VIEW'
A +
-- 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.sqlspot.com *************************
Jean-Yves
Je me suis mal exprimé. J'ai dans une table appelons là T_LOT_FAB_LFB plusieurs champs dont un qui se nomme LFB_DATE_LIVRAISON.
Ce champs est référencé dans plusieurs vues , exemple : CREATE VIEW V_LOT_FAB AS SELECT ... LFB_DATE_LIVRAISON AS DATE_LIVRAISON, ... FROM T_LOT_FAB_LFB
Et une autre vue : CREATE V_LOT_SOLDE AS SELECT DATE_LIVRAISON,.. FROM V_LOT_FAB WHERE DATE_LIVRAISON IS NOT NULL
Quelle est la requête qui peut fournir la liste des vues qui référencent le champ LFB_DATE_LIVRAISON ?
Merci d'avance
Jean-Yves
Cette table est référencée
-- Jean-Yves RANCUREL
"Fred BROUARD" a écrit :
Jean-Yves a écrit : > Bonjour à tous , > > Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues > qui font références à un champ particulier d'une table . > Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que > la requête puisse remonter jusqu'à la table d'où est issu le champ recherché. > > Comment puis-je faire une telle reqête ? > > Merci d'avance > select * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_TYPE = 'VIEW'
A +
-- 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.sqlspot.com *************************
Je me suis mal exprimé.
J'ai dans une table appelons là T_LOT_FAB_LFB plusieurs champs dont un qui
se nomme LFB_DATE_LIVRAISON.
Ce champs est référencé dans plusieurs vues , exemple :
CREATE VIEW V_LOT_FAB
AS
SELECT ...
LFB_DATE_LIVRAISON AS DATE_LIVRAISON,
...
FROM T_LOT_FAB_LFB
Et une autre vue :
CREATE V_LOT_SOLDE
AS
SELECT DATE_LIVRAISON,..
FROM V_LOT_FAB
WHERE DATE_LIVRAISON IS NOT NULL
Quelle est la requête qui peut fournir la liste des vues qui référencent le
champ LFB_DATE_LIVRAISON ?
Merci d'avance
Jean-Yves
Cette table est référencée
--
Jean-Yves RANCUREL
"Fred BROUARD" a écrit :
Jean-Yves a écrit :
> Bonjour à tous ,
>
> Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues
> qui font références à un champ particulier d'une table .
> Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que
> la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
>
> Comment puis-je faire une telle reqête ?
>
> Merci d'avance
>
select * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_TYPE = 'VIEW'
A +
--
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.sqlspot.com *************************
Je me suis mal exprimé. J'ai dans une table appelons là T_LOT_FAB_LFB plusieurs champs dont un qui se nomme LFB_DATE_LIVRAISON.
Ce champs est référencé dans plusieurs vues , exemple : CREATE VIEW V_LOT_FAB AS SELECT ... LFB_DATE_LIVRAISON AS DATE_LIVRAISON, ... FROM T_LOT_FAB_LFB
Et une autre vue : CREATE V_LOT_SOLDE AS SELECT DATE_LIVRAISON,.. FROM V_LOT_FAB WHERE DATE_LIVRAISON IS NOT NULL
Quelle est la requête qui peut fournir la liste des vues qui référencent le champ LFB_DATE_LIVRAISON ?
Merci d'avance
Jean-Yves
Cette table est référencée
-- Jean-Yves RANCUREL
"Fred BROUARD" a écrit :
Jean-Yves a écrit : > Bonjour à tous , > > Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues > qui font références à un champ particulier d'une table . > Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que > la requête puisse remonter jusqu'à la table d'où est issu le champ recherché. > > Comment puis-je faire une telle reqête ? > > Merci d'avance > select * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_TYPE = 'VIEW'
A +
-- 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.sqlspot.com *************************
Fred BROUARD
Jean-Yves a écrit :
Je me suis mal exprimé. J'ai dans une table appelons là T_LOT_FAB_LFB plusieurs champs dont un qui se nomme LFB_DATE_LIVRAISON.
Ce champs est référencé dans plusieurs vues , exemple : CREATE VIEW V_LOT_FAB AS SELECT ... LFB_DATE_LIVRAISON AS DATE_LIVRAISON, ... FROM T_LOT_FAB_LFB
Et une autre vue : CREATE V_LOT_SOLDE AS SELECT DATE_LIVRAISON,.. FROM V_LOT_FAB WHERE DATE_LIVRAISON IS NOT NULL
Quelle est la requête qui peut fournir la liste des vues qui référencent le champ LFB_DATE_LIVRAISON ?
il n'y en as pas.
Le seul moyen est de faire un like dans le texte de la commande de création de la vue
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%LFB_DATE_LIVRAISON%'
Heureusement que vous avez adopté une norme de nommage sans ambiguité, car si toutes vos colonnes avait des noms bateau comme "nom", "date" comme mon ami Rudi aime bien, alors cela serait impossible !!!
A +
Merci d'avance
Jean-Yves
Cette table est référencée
-- 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.sqlspot.com *************************
Jean-Yves a écrit :
Je me suis mal exprimé.
J'ai dans une table appelons là T_LOT_FAB_LFB plusieurs champs dont un qui
se nomme LFB_DATE_LIVRAISON.
Ce champs est référencé dans plusieurs vues , exemple :
CREATE VIEW V_LOT_FAB
AS
SELECT ...
LFB_DATE_LIVRAISON AS DATE_LIVRAISON,
...
FROM T_LOT_FAB_LFB
Et une autre vue :
CREATE V_LOT_SOLDE
AS
SELECT DATE_LIVRAISON,..
FROM V_LOT_FAB
WHERE DATE_LIVRAISON IS NOT NULL
Quelle est la requête qui peut fournir la liste des vues qui référencent le
champ LFB_DATE_LIVRAISON ?
il n'y en as pas.
Le seul moyen est de faire un like dans le texte de la commande de
création de la vue
SELECT *
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%LFB_DATE_LIVRAISON%'
Heureusement que vous avez adopté une norme de nommage sans ambiguité,
car si toutes vos colonnes avait des noms bateau comme "nom", "date"
comme mon ami Rudi aime bien, alors cela serait impossible !!!
A +
Merci d'avance
Jean-Yves
Cette table est référencée
--
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.sqlspot.com *************************
Je me suis mal exprimé. J'ai dans une table appelons là T_LOT_FAB_LFB plusieurs champs dont un qui se nomme LFB_DATE_LIVRAISON.
Ce champs est référencé dans plusieurs vues , exemple : CREATE VIEW V_LOT_FAB AS SELECT ... LFB_DATE_LIVRAISON AS DATE_LIVRAISON, ... FROM T_LOT_FAB_LFB
Et une autre vue : CREATE V_LOT_SOLDE AS SELECT DATE_LIVRAISON,.. FROM V_LOT_FAB WHERE DATE_LIVRAISON IS NOT NULL
Quelle est la requête qui peut fournir la liste des vues qui référencent le champ LFB_DATE_LIVRAISON ?
il n'y en as pas.
Le seul moyen est de faire un like dans le texte de la commande de création de la vue
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%LFB_DATE_LIVRAISON%'
Heureusement que vous avez adopté une norme de nommage sans ambiguité, car si toutes vos colonnes avait des noms bateau comme "nom", "date" comme mon ami Rudi aime bien, alors cela serait impossible !!!
A +
Merci d'avance
Jean-Yves
Cette table est référencée
-- 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.sqlspot.com *************************
Fred BROUARD
Jean-Yves a écrit :
Bonjour à tous ,
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues qui font références à un champ particulier d'une table . Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
Comment puis-je faire une telle reqête ?
Merci d'avance
Après m'être penché davantage sur votre intéressant problème voici la requête adéquate :
WITH V_VIEWS (VIEW_SCHEMA, VIEW_NAME, VIEW_DEFINITION, VIEW_LEVEL) AS ( -- views having a column nammed STE_TVA_CODE_PAYS SELECT TABLE_SCHEMA AS VIEW_SCHEMA, TABLE_NAME AS VIEW_NAME, VIEW_DEFINITION, 0 AS VIEW_LEVEL FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%' UNION ALL -- views having a view based on a column nammed STE_TVA_CODE_PAYS SELECT V1.TABLE_SCHEMA AS VIEW_SCHEMA, V1.TABLE_NAME AS VIEW_NAME, V1.VIEW_DEFINITION, V2.VIEW_LEVEL + 1 FROM INFORMATION_SCHEMA.VIEWS V1 INNER JOIN V_VIEWS V2 ON V1.VIEW_DEFINITION LIKE '%' + V2.VIEW_SCHEMA + '.' + V2.VIEW_NAME + '%' WHERE V2.VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%' AND V2.VIEW_SCHEMA + '.' + V2.VIEW_NAME <> V1.TABLE_SCHEMA + '.' + V1.TABLE_NAME ) SELECT * FROM V_VIEWS
Ici on recherche les vues ayant une colonne de nom STE_TVA_CODE_PAYS. Le résultat donne les vues de niveau zéro (celles ayant directement la colonnes), puis les vues de niveau 1 (faisant référence à une vue de niveau 0), 2 (aisant référence à une vue de niveau 1), etc.
La requête utilise une CTE (Commaon table expression qui permet des requêtes récursive. Si vous êtes pas en version 2005, il faut faire cela avec des requêtes succesives comme ceci :
-- views having a column nammed STE_TVA_CODE_PAYS SELECT TABLE_SCHEMA AS VIEW_SCHEMA, TABLE_NAME AS VIEW_NAME, 0 AS VIEW_LEVEL FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%'
-- views having a view based on a column nammed STE_TVA_CODE_PAYS SELECT V1.TABLE_SCHEMA AS VIEW_SCHEMA, V1.TABLE_NAME AS VIEW_NAME, 1 AS VIEW_LEVEL FROM INFORMATION_SCHEMA.VIEWS V1 INNER JOIN INFORMATION_SCHEMA.VIEWS V2 ON V1.VIEW_DEFINITION LIKE '%' + V2.TABLE_SCHEMA + '.' + V2.TABLE_NAME + '%' WHERE V2.VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%' AND V2.TABLE_SCHEMA + '.' + V2.TABLE_NAME <> V1.TABLE_SCHEMA + '.' + V1.TABLE_NAME
... and so on !
A +
-- 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.sqlspot.com *************************
Jean-Yves a écrit :
Bonjour à tous ,
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues
qui font références à un champ particulier d'une table .
Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que
la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
Comment puis-je faire une telle reqête ?
Merci d'avance
Après m'être penché davantage sur votre intéressant problème voici la
requête adéquate :
WITH V_VIEWS (VIEW_SCHEMA, VIEW_NAME, VIEW_DEFINITION, VIEW_LEVEL)
AS
(
-- views having a column nammed STE_TVA_CODE_PAYS
SELECT TABLE_SCHEMA AS VIEW_SCHEMA,
TABLE_NAME AS VIEW_NAME,
VIEW_DEFINITION,
0 AS VIEW_LEVEL
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%'
UNION ALL
-- views having a view based on a column nammed STE_TVA_CODE_PAYS
SELECT V1.TABLE_SCHEMA AS VIEW_SCHEMA,
V1.TABLE_NAME AS VIEW_NAME,
V1.VIEW_DEFINITION,
V2.VIEW_LEVEL + 1
FROM INFORMATION_SCHEMA.VIEWS V1
INNER JOIN V_VIEWS V2
ON V1.VIEW_DEFINITION
LIKE '%' + V2.VIEW_SCHEMA + '.' + V2.VIEW_NAME + '%'
WHERE V2.VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%'
AND V2.VIEW_SCHEMA + '.' + V2.VIEW_NAME <> V1.TABLE_SCHEMA + '.' +
V1.TABLE_NAME
)
SELECT *
FROM V_VIEWS
Ici on recherche les vues ayant une colonne de nom STE_TVA_CODE_PAYS.
Le résultat donne les vues de niveau zéro (celles ayant directement la
colonnes), puis les vues de niveau 1 (faisant référence à une vue de
niveau 0), 2 (aisant référence à une vue de niveau 1), etc.
La requête utilise une CTE (Commaon table expression qui permet des
requêtes récursive.
Si vous êtes pas en version 2005, il faut faire cela avec des requêtes
succesives comme ceci :
-- views having a column nammed STE_TVA_CODE_PAYS
SELECT TABLE_SCHEMA AS VIEW_SCHEMA,
TABLE_NAME AS VIEW_NAME,
0 AS VIEW_LEVEL
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%'
-- views having a view based on a column nammed STE_TVA_CODE_PAYS
SELECT V1.TABLE_SCHEMA AS VIEW_SCHEMA,
V1.TABLE_NAME AS VIEW_NAME,
1 AS VIEW_LEVEL
FROM INFORMATION_SCHEMA.VIEWS V1
INNER JOIN INFORMATION_SCHEMA.VIEWS V2
ON V1.VIEW_DEFINITION
LIKE '%' + V2.TABLE_SCHEMA + '.' + V2.TABLE_NAME + '%'
WHERE V2.VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%'
AND V2.TABLE_SCHEMA + '.' + V2.TABLE_NAME <> V1.TABLE_SCHEMA + '.' +
V1.TABLE_NAME
... and so on !
A +
--
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.sqlspot.com *************************
Sous SQL Server 2000 , je voudrais récupérer la liste exhaustive des vues qui font références à un champ particulier d'une table . Je précise que j'ai des Vues qui appellent d'autres vues , il faut donc que la requête puisse remonter jusqu'à la table d'où est issu le champ recherché.
Comment puis-je faire une telle reqête ?
Merci d'avance
Après m'être penché davantage sur votre intéressant problème voici la requête adéquate :
WITH V_VIEWS (VIEW_SCHEMA, VIEW_NAME, VIEW_DEFINITION, VIEW_LEVEL) AS ( -- views having a column nammed STE_TVA_CODE_PAYS SELECT TABLE_SCHEMA AS VIEW_SCHEMA, TABLE_NAME AS VIEW_NAME, VIEW_DEFINITION, 0 AS VIEW_LEVEL FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%' UNION ALL -- views having a view based on a column nammed STE_TVA_CODE_PAYS SELECT V1.TABLE_SCHEMA AS VIEW_SCHEMA, V1.TABLE_NAME AS VIEW_NAME, V1.VIEW_DEFINITION, V2.VIEW_LEVEL + 1 FROM INFORMATION_SCHEMA.VIEWS V1 INNER JOIN V_VIEWS V2 ON V1.VIEW_DEFINITION LIKE '%' + V2.VIEW_SCHEMA + '.' + V2.VIEW_NAME + '%' WHERE V2.VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%' AND V2.VIEW_SCHEMA + '.' + V2.VIEW_NAME <> V1.TABLE_SCHEMA + '.' + V1.TABLE_NAME ) SELECT * FROM V_VIEWS
Ici on recherche les vues ayant une colonne de nom STE_TVA_CODE_PAYS. Le résultat donne les vues de niveau zéro (celles ayant directement la colonnes), puis les vues de niveau 1 (faisant référence à une vue de niveau 0), 2 (aisant référence à une vue de niveau 1), etc.
La requête utilise une CTE (Commaon table expression qui permet des requêtes récursive. Si vous êtes pas en version 2005, il faut faire cela avec des requêtes succesives comme ceci :
-- views having a column nammed STE_TVA_CODE_PAYS SELECT TABLE_SCHEMA AS VIEW_SCHEMA, TABLE_NAME AS VIEW_NAME, 0 AS VIEW_LEVEL FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%'
-- views having a view based on a column nammed STE_TVA_CODE_PAYS SELECT V1.TABLE_SCHEMA AS VIEW_SCHEMA, V1.TABLE_NAME AS VIEW_NAME, 1 AS VIEW_LEVEL FROM INFORMATION_SCHEMA.VIEWS V1 INNER JOIN INFORMATION_SCHEMA.VIEWS V2 ON V1.VIEW_DEFINITION LIKE '%' + V2.TABLE_SCHEMA + '.' + V2.TABLE_NAME + '%' WHERE V2.VIEW_DEFINITION LIKE '%STE_TVA_CODE_PAYS%' AND V2.TABLE_SCHEMA + '.' + V2.TABLE_NAME <> V1.TABLE_SCHEMA + '.' + V1.TABLE_NAME
... and so on !
A +
-- 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.sqlspot.com *************************