Gerar Dicionário de Dados
De MSTECH wiki
Aplicativos
RedGate Documentation Tool
- Versão trial 14 dias. Valor de assinatura anual no site abaixo:
- http://www.red-gate.com/products/sql-development/sql-doc/
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
- https://github.com/EWSoftware/SHFB
- Gera documentação de projetos de uma solução no VS (bom para documentar entidades, e viewModels de entity Framework)
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