Mudanças entre as edições de "Gerar Dicionário de Dados"
De MSTECH wiki
(Criou página com '== 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-...') |
|||
Linha 12: | Linha 12: | ||
==== Contras ==== | ==== Contras ==== | ||
* Caso selecione muitas propriedades de muitos objetos, ele trava e não gera a documentação; | * 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, 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. ''' | + | * ''' 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 === | === SQL Data Dictionary === | ||
− | http://www.sqldatadictionary.com/ | + | * http://www.sqldatadictionary.com/ |
+ | ==== 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. | ||
+ | |||
+ | |||
+ | === Script SQL === | ||
+ | ==== 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 |
Edição das 15h58min de 25 de maio de 2016
Índice
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.
Script SQL
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