Accueil > > > SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATION
SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATION
Information sur la source
Description
Avec cette source, je veux montrer qu'il est extrêmement simple de générer une rétro-documentation à partir des procédures stockées du système. En effet, il suffit d'exécuter la requête source (curseur) et de demander à SQL Server de retourner son résultat dans un fichier de type csv pour créer un fichier Excel de rétro-documentation de la base de données choisie.
Source
- -- Base de données traitée
- USE [AdventureWorks];
-
- -- Ne pas afficher le nbre de lignes affectées
- SET NOCOUNT ON
-
- -- Variable locale
- DECLARE @nom_table AS NVARCHAR(128)
-
- -- Nom de la base de données et date de création
- PRINT 'BASE ' + db_name()
- PRINT 'Document créé le ' + Convert(char(10), getdate(), 103)
- PRINT ''
-
- -- Curseur de génération de la rétro-documentation
- DECLARE tables_cursor CURSOR FOR SELECT [name] FROM sys.all_objects WHERE type_desc = 'USER_TABLE'
- OPEN tables_cursor
- -- Première table analysée
- FETCH NEXT FROM tables_cursor INTO @nom_table
-
- WHILE @@FETCH_STATUS = 0 BEGIN
- -- Nom de la table
- PRINT 'TABLE : ' + @nom_table
- -- Structure de la table (tableau de méta-données)
- SELECT DISTINCT c.name AS [Colonne],ISC.data_type AS [Type],c.max_length AS [Long.], CASE ISC.is_nullable WHEN 'NO' THEN 'OUI' ELSE 'NON' END AS [Oblig.],
- isnull(ISC.column_default,'') AS [Val. par défaut], CASE c.is_identity WHEN '0' THEN '' ELSE 'OUI' END AS [Incr. auto], ISNULL(CASE WHEN i.is_primary_key = 1 THEN 'Clé primaire '
- WHEN i.is_unique = 1 THEN 'Clé unique ' ELSE 'Clé avec doublon ' END + 'de type '+ i.type_desc,'') AS [Clé],
- CASE WHEN isnull(fc.name,'0') = '0' THEN '' ELSE 'Clé étrangère : ' + isnull(o2.name,'') + '.' + isnull(c2.name,'') END AS [Contrainte]
- FROM sys.all_objects o
- INNER JOIN sys.all_columns c ON o.object_id = c.object_id
- LEFT OUTER JOIN INFORMATION_SCHEMA.COLUMNS ISC ON ISC.table_name = o.name AND c.name = ISC.column_name
- LEFT OUTER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON ccu.table_name = o.name AND c.name = ccu.column_name
- LEFT OUTER JOIN sys.foreign_keys fc on fc.name = ccu.constraint_name
- LEFT OUTER JOIN sys.all_columns c2 ON c2.object_id = fc.referenced_object_id AND fc.key_index_id = c2.column_id
- LEFT OUTER JOIN sys.all_objects o2 ON o2.object_id = c2.object_id
- LEFT OUTER JOIN sys.index_columns ic ON o.object_id = ic.object_id AND ic.column_id = c.column_id
- LEFT OUTER JOIN sys.indexes i ON i.object_id = ic.object_id AND ic.index_id = i .index_id
- WHERE o.name = @nom_table
- -- Table suivante
- FETCH NEXT FROM tables_cursor INTO @nom_table
- END
-
- -- Libération de la mémoire
- CLOSE tables_cursor
- DEALLOCATE tables_cursor
-- Base de données traitée
USE [AdventureWorks];
-- Ne pas afficher le nbre de lignes affectées
SET NOCOUNT ON
-- Variable locale
DECLARE @nom_table AS NVARCHAR(128)
-- Nom de la base de données et date de création
PRINT 'BASE ' + db_name()
PRINT 'Document créé le ' + Convert(char(10), getdate(), 103)
PRINT ''
-- Curseur de génération de la rétro-documentation
DECLARE tables_cursor CURSOR FOR SELECT [name] FROM sys.all_objects WHERE type_desc = 'USER_TABLE'
OPEN tables_cursor
-- Première table analysée
FETCH NEXT FROM tables_cursor INTO @nom_table
WHILE @@FETCH_STATUS = 0 BEGIN
-- Nom de la table
PRINT 'TABLE : ' + @nom_table
-- Structure de la table (tableau de méta-données)
SELECT DISTINCT c.name AS [Colonne],ISC.data_type AS [Type],c.max_length AS [Long.], CASE ISC.is_nullable WHEN 'NO' THEN 'OUI' ELSE 'NON' END AS [Oblig.],
isnull(ISC.column_default,'') AS [Val. par défaut], CASE c.is_identity WHEN '0' THEN '' ELSE 'OUI' END AS [Incr. auto], ISNULL(CASE WHEN i.is_primary_key = 1 THEN 'Clé primaire '
WHEN i.is_unique = 1 THEN 'Clé unique ' ELSE 'Clé avec doublon ' END + 'de type '+ i.type_desc,'') AS [Clé],
CASE WHEN isnull(fc.name,'0') = '0' THEN '' ELSE 'Clé étrangère : ' + isnull(o2.name,'') + '.' + isnull(c2.name,'') END AS [Contrainte]
FROM sys.all_objects o
INNER JOIN sys.all_columns c ON o.object_id = c.object_id
LEFT OUTER JOIN INFORMATION_SCHEMA.COLUMNS ISC ON ISC.table_name = o.name AND c.name = ISC.column_name
LEFT OUTER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON ccu.table_name = o.name AND c.name = ccu.column_name
LEFT OUTER JOIN sys.foreign_keys fc on fc.name = ccu.constraint_name
LEFT OUTER JOIN sys.all_columns c2 ON c2.object_id = fc.referenced_object_id AND fc.key_index_id = c2.column_id
LEFT OUTER JOIN sys.all_objects o2 ON o2.object_id = c2.object_id
LEFT OUTER JOIN sys.index_columns ic ON o.object_id = ic.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN sys.indexes i ON i.object_id = ic.object_id AND ic.index_id = i .index_id
WHERE o.name = @nom_table
-- Table suivante
FETCH NEXT FROM tables_cursor INTO @nom_table
END
-- Libération de la mémoire
CLOSE tables_cursor
DEALLOCATE tables_cursor
Conclusion
Le fichier joint comprend une rétro-documentation de la base de données AdventureWorks. Volontairement très simple, la base documentaire (MLD) peut-être complétée, détaillée à loisir. Par exemple, si besoin, une jointure supplémentaire sur sys.extended_properties permet d'ajouter une colonne description.
A l'occasion de cette publication, je salue mon collège et ami Bruno à qui l'on doit cette source.
Historique
- 22 juillet 2009 14:40:30 :
- Commentaire
- 22 juillet 2009 15:07:15 :
- Conclusion : colonne description
- 22 juillet 2009 17:33:34 :
- Conclusion
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|