Dicionario de dados diretamente pelo SQL Server.

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.

BLOG DO ZOUZA

"Lifelong Learner" - Compartilhando e Adquirindo Conhecimentos!

Blog - Thiago Carlos de Alencar

Aprendendo SQL Server !

SQL Authority with Pinal Dave

SQL Server Performance Tuning Expert

Vitor Fava

Let s Learn, Practice and Share some knowledge

Diego Nogare

DBCC DumpMemory 'TECH','ALL'

Gustavo Maia Aguiar

Artigos, dicas e algumas reflexões sobre o SQL Server

Kimberly L. Tripp

DBCC DumpMemory 'TECH','ALL'

Thiago Zavaschi R2

www.zavaschi.com

Blog do Luti

DBCC DumpMemory 'TECH','ALL'

Luan.Moreno a.k.a [SQL.Soul]

Lead Database Consultant at Pythian

Blog do Leka

let's make things better