begin process at 2013 06 19 00:44:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATION

SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATION


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Classé sous :Génération automatique, MLD, Base documentaire, Rétro-documentation, Livrable Niveau :Débutant Date de création :22/07/2009 Date de mise à jour :22/07/2009 17:33:34 Vu / téléchargé :14 521 / 599

Auteur : FENETRES

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
  
   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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • retro doc.csvTélécharger ce fichier [Réservé aux membres club]73 732 octets

Télécharger le zip


 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 du même auteur

Source avec Zip Source avec une capture SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT C...
Source avec une capture SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES
Source avec une capture SQL SERVER 2005 - GESTION DE LA LARGEUR DES COLONNES D'UNE R...
SQL SERVER - OBTENIR LA DATE DU DERNIER JOUR DU MOIS (GET LA...
SQL SERVER - ADRESSE MAC ET NOM D'ORDINATEUR

 Sources de la même categorie

CHERCHER LES PROCÉDURES STOCKÉES CONTENANT UN MOT-CLÉ OU UN ... par white_mage
SUPPRESSION DES ESPACES MULTIPLE D'UNE CHAÎNE (ORACLE ,SQL) par lamjed
TRANSFORMER UNE CHAÎNE EN UN TABLEAU D'ENREGISTREMENT (ORACL... par lamjed
ESPACE LIBRE PAR TABLESPACE par lamjed
JOURS FÉRIÉ HIRJI TUNISIE par lamjed

Commentaires et avis

Commentaire de Delphiprog le 03/11/2009 21:07:57 administrateur CS 10/10

Source très intéressant, bien documenté et bien écrit = 10/10

Commentaire de karimmassi le 12/07/2011 00:10:10

Source bien documenté, très bien.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales