Gerar Dicionário de Dados

De MSTECH wiki
Ir para: navegação, pesquisa

Aplicativos

RedGate Documentation Tool

Prós:

  • Gera documentação em arquivo doc do word;
  • Permite selecionar cada tipo de configuração que se queira documentar (exemplo: se quer cada tipo de dado ou não, índices, ou propriedades referentes a collation, arquivos, etc), permitindo diminuir o tamanho do documento;
  • Permite escrever a documentação dentro do projeto (caso o usuário não tenha permissão de editar o banco de dados, ou queira corrigir algo)
  • Salvar / Carregar projetos de documentação;
  • Gera a documentação em html, pdf, chm (arquivo de ajuda), e doc(x)
  • Pode valer a pena adicionar mais esta ferramenta na suíte do redgate, caso seja comprado

Contras

  • Caso selecione muitas propriedades de muitos objetos, ele trava e não gera a documentação;
  • O arquivo Doc, ou docx que ele gera divide o arquivo em muitas sessões (uma pra cada tabela), o que impede a criação de cabeçalhos e rodapés customizados da empresa, inviabilizando alguma possível entrega deste documento da forma como é gerado, e inviabilizando pelo tempo gasto para adequá-lo.


SQL Data Dictionary

Prós

  • Versão trial que não expira;
  • Gera PDF, porém é possível abrir no word com poucas sessões (cerca de 6 ou 7, não sei qual o critério), sendo simples unificá-las e gerar uma documentação de acordo;

Contras

  • Não permite edição de campos, o banco tem que estar documentado corretamente;
  • Não permite gerar outro tipo de documento na versão trial, apenas pdf.


SandCastle

HOWTO

  • Abrir, criar um projeto numa pasta qualquer
  • Em Documentation Sources, escolher os .csproj que quer documentar
  • Em HelpFile -> Presentation style, coloque o tipo de apresentação que vc quer gerar (openxml, vs2013, etc)
  • Clique em build


Script SQL (TODO: arrumar a aparência do código nesta wiki)

Gera apenas nomes de campos

select

   NomeTabela = tbl. table_name,
   NomeColuna = col. column_name,
   Tipo = col. data_type +
   case when COL. CHARACTER_MAXIMUM_LENGTH is not null and col .data_type <> 'text' then '(' + case when COL.CHARACTER_MAXIMUM_LENGTH <> - 1 then CAST(COL .CHARACTER_MAXIMUM_LENGTH as nvarchar( 256)) else 'max' end + ')' else  end +
   case when col. NUMERIC_PRECISION is not null and col .data_type not in ('bigint', 'int', 'tinyint', 'smallint') then '(' + CAST( col.NUMERIC_PRECISION as nvarchar(256 )) else  end +
   case when col. NUMERIC_SCALE is not null and col .data_type not in ('bigint', 'int', 'tinyint', 'smallint') then ', ' + CAST(col .NUMERIC_SCALE as nvarchar( 256)) + ')' else  end ,
   DescricaoDaColuna = cast (prop. value as varchar(4000 )),
   PodeSerNulo = case col.IS_NULLABLE when 'NO' then 'Não' else 'Sim' end,
   ChavePrimaria = case when PKEY .COLUMN_NAME IS not null then 'Sim' else 'Não' end,
   Ordem = col. ORDINAL_POSITION

FROM information_schema .tables tbl INNER JOIN information_schema. columns col

   ON col .table_name = tbl.table_name

LEFT JOIN INFORMATION_SCHEMA. KEY_COLUMN_USAGE PKEY

   ON object_id(PKEY .table_schema + '.' + PKEY. table_name) =  object_id(tbl .table_schema + '.' + tbl. table_name)
   AND PKEY .ORDINAL_POSITION = COL.ORDINAL_POSITION
   AND OBJECTPROPERTY(OBJECT_ID (PKEY. constraint_name), 'IsPrimaryKey') = 1

LEFT JOIN sys. extended_properties prop

   ON prop .major_id = object_id( tbl.table_schema + '.' + tbl .table_name)
   AND prop .minor_id = col.ORDINAL_POSITION
   AND prop .name = 'MS_Description'

WHERE tbl. table_type = 'base table' order by tbl.table_name , col. ORDINAL_POSITION

Gera com nome de tabelas também (pendente: juntar com o script de cima)

SELECT u.name + '.' + t .name AS [table],

           td .value AS [table_desc],
             c .name AS [column],
             cd .value AS [column_desc]

FROM sysobjects t INNER JOIN sysusers u

   ON        u .uid = t. uid

LEFT OUTER JOIN sys.extended_properties td

   ON        td .major_id = t.id
   AND       td .minor_id = 0
   AND              td .name = 'MS_Description'

INNER JOIN syscolumns c

   ON        c .id = t.id

LEFT OUTER JOIN sys.extended_properties cd

   ON        cd .major_id = c.id
   AND              cd .minor_id = c.colid
   AND              cd .name = 'MS_Description'

WHERE t. type = 'u' ORDER BY t.name , c. colorder