begin process at 2010 07 29 22:30:07
  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é :6 252 / 311

Auteur : FENETRES

Ecrire un message privé
Commentaire sur cette source (1)
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

[SQL SERVEUR] VÉRIFIER L'ESPACE OCCUPÉ DANS UNE BASE DE DONN... par Hyperion
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo
REQUÊTE SQL POUR DÉTERMINER L'ESPACE OCCUPÉ DANS LES TABLESP... par sgoriaud
SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE par fabrice69
AJOUT , SUPPRESSION INTERVALLE DE TEMPS EN PLSQL 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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
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,562 sec (3)

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