Mudanças entre as edições de "Gerar Dicionário de Dados"

De MSTECH wiki
Ir para: navegação, pesquisa
(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

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.


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