Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Répertorier les vues qui font références à un champ d'une table

4 réponses
Avatar
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é.

Comment puis-je faire une telle reqête ?

Merci d'avance

--
Jean-Yves RANCUREL

4 réponses

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



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