Dicionario de dados diretamente pelo SQL Server.
11 de outubro de 2012 1 Comentário
Fala Galera,
Imaginem um mundo ideal, onde todas as tabelas e campos que criamos são bem documentados e estão sempre a mão…ok! podem acordar…sei que são poucos os ambientes onde isso ocorre.
Onde trabalho atualmente, uma grande empresa de marketing em SP, estamos implantando este tipo de documentação, e digo com propriedade que este processo ajuda muito na hora de realizar uma manutenção no sistema.
Bem, vamos documentar o que cada campo de uma dada tabela deverá armazenar através da system procedure : sp_addextendedproperty
Primeiramente devemos criar uma procedure que irá nos dará mais agilidade na hora da documentação.
create procedure addDescricaoCampo(@Tabela as varchar(100) , @Coluna as varchar(100) , @Descricao as Varchar(1000) ) as begin EXEC sys.sp_addextendedproperty @name= 'Caption', @value= @Descricao , @level0type='SCHEMA', @level0name='dbo', @level1type='TABLE', @level1name= @Tabela, @level2type='COLUMN', @level2name= @coluna end --procedure CREATE TABLE EdaComplementoMailing( CelularClaroCOmvc_VD varchar(11), CNPJ_PDV varchar(14), CelularClaroComvc_Vpdv varchar(11) )
Agora, utilizando a nossa proc, vamos incluir as informações de nossos campos.
--Popula dicionário de Dados (adiciona descrição aos campos) exec addDescricaoCampo 'EdaComplementoMailing','CNPJ_PDV','Campo que ir armarzenar o nmero do CPF ou CNPJ do Ponto de Venda ' go exec addDescricaoCampo 'EdaComplementoMailing','CelularClaroCOmvc_VD','Campo que ir armarzenar o nmero do telefone celular da campanha ClaroComVc do Vendedor do Distribuidor' go exec addDescricaoCampo 'EdaComplementoMailing','CelularClaroComvc_Vpdv','Campo que ir armarzenar o nmero do telefone celular da campanha ClaroComVc do Vendedor do Ponto de Venda'
Muito bom! Mas e agora? Como vamos consultar nossa documentação?
Bem, através de algumas tabelas de sistema o SQL Server nos permite fazer isto.
--–Consulta Dicionário de Dados Select c.Object_id,Objetos.Name,c.Name,p.Value,t.Name,c.Precision,c.Scale, Case c.Is_Nullable When 0 then 'No' else 'Sim' End as Nulo, Case c.Is_Computed When 0 then 'No' else 'Sim' End as Computado, Case c.Is_Identity When 0 then 'No' else 'Sim' End as 'Identity', c.Collation_name, Case c.Is_Replicated When 0 then 'No' else 'Sim' End as 'Replicado' from Sys.All_Columns C Join Sys.Types T On t.System_Type_Id=c.System_Type_id Left Outer Join Sys.SysComments Cc On cc.Id=c.Default_Object_Id Left Outer Join Sys.Extended_Properties P On p.Major_id=c.Object_id and Minor_id=c.Column_Id Join Sys.All_Objects Objetos On Objetos.Object_id=c.Object_Id where c.object_id = object_id('EdaComplementoMailing')
UPDATE:
Um dia desses acabei ajudando uma leitora do blog (Amanda) e criei o seguinte script
que gera metade do código necessário para criar seu dicionário de dados:
</pre> <pre>/*O select abaixo vai gerar um resultset com todas as colunas de todas as suas tabelas já no padrão de criação do dicionário de dados. Basca voce copiar o resultado, adicionar a info de cada coluna, executar e depois conultar (ultimo passo)*/ SELECT ' exec addDescricaoCampo ''' + t.NAME + ''','''+ c.NAME + ''',''[DESCRIÇÃO CAMPO]''' FROM sys.objects t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE t.TYPE = 'U' ORDER BY t.NAME, c.NAME
Por hora é isso.
Abraços.