<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diário de um DBA &#187; information_schema</title>
	<atom:link href="http://silasmendes.com/dba/tag/information_schema/feed" rel="self" type="application/rss+xml" />
	<link>http://silasmendes.com/dba</link>
	<description>Tecnologia &#38; Banco de Dados</description>
	<lastBuildDate>Tue, 27 Dec 2011 12:53:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SQL Server via prompt de comando?</title>
		<link>http://silasmendes.com/dba/sql-server-via-prompt</link>
		<comments>http://silasmendes.com/dba/sql-server-via-prompt#comments</comments>
		<pubDate>Tue, 20 Oct 2009 20:30:02 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[SQL SERVER 2005]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[consulta metadados]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[information_schema]]></category>
		<category><![CDATA[isql]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[Management Studio]]></category>
		<category><![CDATA[osql]]></category>
		<category><![CDATA[prompt DOS]]></category>
		<category><![CDATA[Query Analyser]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sp_readerrorlog]]></category>
		<category><![CDATA[sp_who]]></category>
		<category><![CDATA[sql server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[sqlcmd]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=404</guid>
		<description><![CDATA[Em minha experiência pessoal já vivi uma situação onde durante a atualização do principal sistema da empresa, nosso contato no datacenter reclamou dizendo que não conseguia abrir o Management Studio para executar nossos scripts. A solução mais rápida? Enviei para o datacenter o procedimento de execução dos scripts via SQLCMD. Mas o que é isso? [...]]]></description>
			<content:encoded><![CDATA[<p>Em minha experiência pessoal já vivi uma situação onde durante a atualização do principal sistema da empresa, nosso contato no datacenter reclamou dizendo que não conseguia abrir o <strong>Management Studio</strong> para executar nossos scripts.</p>
<p>A solução mais rápida? Enviei para o datacenter o procedimento de execução dos scripts via <strong>SQLCMD</strong>.</p>
<p>Mas o que é isso?</p>
<p>O SQLCMD é uma ferramenta que você utiliza para acessar instâncias SQL Server via prompt de comando (vulgo DOS). Não existem segredos, uma vez conectado, através de scripts você pode fazer tudo o que faria utilizando o <em>Query Analyser</em> ou o <em>Management Studio</em>. Apesar de ser uma excelente ferramenta, o SQLCMD tem suas limitações &#8220;gráficas&#8221;, no entanto em alguns cenários é a ferramenta ideal!</p>
<p>Os exemplos que vou apresentar foram executados na minha estação de trabalho. Nela tenho instalado um SQL Server 2005. Minha instância é uma instância nomeada e é identificada como SQL05.</p>
<p>Pra começar a conversa vamos ao prompt de comando (menu Iniciar &gt; Executar &gt; cmd).</p>
<p>No prompt de comando, para conectar no meu SQL local (localhost), utilizando o SQLCMD, devo digitar o seguinte comando:</p>
<blockquote><p>sqlcmd –E  –S  LOCALHOST\SQL05</p>
</blockquote>
<p>No comando acima estou conectando no SQL Server utilizando a autenticação Windows (<strong>-E</strong>) na instância SQL05 (<strong>-S</strong>), mas se for necessário conectar utilizando a autenticação do SQL Server, ficaria assim:</p>
<blockquote><p>sqlcmd  –U SA –P senhateste –S  LOCALHOST\SQL05</p>
</blockquote>
<p>No exemplo acima, estou conectando no SQL utilizando o login SA  do SQL Server (<strong>-U</strong>) com a senha  <em>senhateste </em>(<strong>-P</strong>).</p>
<p>Se a conexão for realizada com <strong>sucesso</strong> o prompt do SQLCMD ficará similar à imagem abaixo:</p>
<p><img class="aligncenter size-full wp-image-405" title="01sqlcmd" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/01sqlcmd.PNG" alt="01sqlcmd" width="344" height="99" /></p>
<p>Se o seu SQL Server foi instalado como uma instância padrão a conexão é ainda mais simples, pois você não precisa especificar o nome da instância. No exemplo abaixo estamos conectando numa instância padrão do SQL Server, utilizando autenticação Windows.</p>
<blockquote><p>sqlcmd –E</p>
</blockquote>
<p>Uma vez conectado, para sair do SQLCMD podemos utilizar os clássicos <strong>EXIT </strong>ou <strong>CTRL + C</strong>.</p>
<p>Dentro do SQLCMD é importante saber que suas instruções sql só serão executadas quando você digitar um <strong>GO </strong>e confirmar com um ENTER. No exemplo abaixo eu mudei o contexto para a base de dados Northwind e logo depois executei uma consulta. Veja que ao fim de cada instrução eu adicionei um GO.</p>
<h5><img class="aligncenter size-full wp-image-406" title="02sqlcmd" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/02sqlcmd.PNG" alt="02sqlcmd" width="577" height="414" /><span style="font-weight: normal;">Note que a cada GO a numeração das linhas recomeça.</span></h5>
<p>Uma vez conectado, como já citado, você poderá executar qualquer instrução SQL desde <em>selects</em>, <em>updates</em>, até a criação de bancos e tabelas ou a execução de procedures do sistema que te auxiliem a monitorar seu SQL Server, como:</p>
<p>Ler log do SQL Server</p>
<blockquote><p>sp_readerrorlog</p>
<p>go</p>
</blockquote>
<p>Verificar conexões na instância:</p>
<blockquote><p>sp_who</p>
<p>go</p>
</blockquote>
<p>Etc…</p>
<p>Combinado a isto, é possível também <strong>executar comandos do DOS</strong> <strong>dentro do SQLCMD</strong>. Para listar o C:\ basta digitar</p>
<blockquote><p>!!dir C:\</p>
</blockquote>
<p>Se quiser dar uma limpada na tela, digite:</p>
<blockquote><p>!!cls</p>
</blockquote>
<p>Como você pode notar todos os comandos do prompt DOS são precedidos por dois pontos de exclamação (<strong>!!</strong>).</p>
<p>Ok&#8230;</p>
<p>Mas digamos agora que você tenha aí um script pronto e deseja executá-lo no SQLCMD, além disso deseja gravar o resultado da execução deste script num arquivo txt. Vamos exemplificar esta situação utilizando o script abaixo que será salvo na unidade c:\ num arquivo identificado como <strong>teste.sql</strong>.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">USE northwind</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">SELECT</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>table_name nomeTabela,</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>column_name nomeColuna,</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>data_type tipoDaColuna,</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>isnull(character_set_name, &#8216;NoUnicode&#8217;) campoUnicode</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">FROM</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>information_schema.columns</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">WHERE</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 2126px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"><span style="white-space: pre;"> </span>table_name = &#8216;Categories&#8217;</div>
<blockquote><p>USE northwind</p>
<p>&#8211; lista todas as colunas da tabela Categories da base Northwind</p>
<p>SELECT</p>
<p><span style="white-space: pre;"> </span>table_name nomeTabela,</p>
<p><span style="white-space: pre;"> </span>column_name nomeColuna,</p>
<p><span style="white-space: pre;"> </span>data_type tipoDaColuna,</p>
<p><span style="white-space: pre;"> </span>isnull(character_set_name, &#8216;NoUnicode&#8217;) campoUnicode</p>
<p>FROM</p>
<p><span style="white-space: pre;"> </span>information_schema.columns</p>
<p>WHERE</p>
<p><span style="white-space: pre;"> </span>table_name = &#8216;Categories&#8217;</p>
</blockquote>
<p>Veja como fica a linha dessa chamada utilizando o SQLCMD:</p>
<p><img class="aligncenter size-full wp-image-407" title="03sqlcmd" src="http://silasmendes.com/dba/wp-content/uploads/2009/10/03sqlcmd.PNG" alt="03sqlcmd" width="687" height="23" /></p>
<h5><span style="font-weight: normal;"><span style="color: #999999;">sqlcmd -E -S LOCALHOST\SQL05 -i&#8221;c:\teste.sql&#8221; -o&#8221;resultado.txt&#8221;</span></span></h5>
<p class="MsoNormal">O parâmetro <strong>–i</strong> indica o arquivo de entrada (INPUT),  que contém o script que será executado. O parâmetro <strong>–o</strong> indica qual será o arquivo de saída (OUTPUT), que conterá o resultado da execução.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Como qualquer assunto no SQL Server, este é mais um que poderíamos discorrer por páginas e mais páginas&#8230; mas por enquanto ficamos por aqui. Creio que essa introdução é o suficiente pra entendemos o potencial <span style="mso-spacerun: yes;"> </span>desta ferramenta.</p>
<p class="MsoNormal">Para obter mais informações sobre os parâmetros do <strong>SQLCMD</strong>, no prompt do DOS digite <strong>sqlcmd -?</strong> Se esse help parecer um pouco confuso você poderá acessar este <a href="http://msdn.microsoft.com/pt-br/library/ms165702.aspx" target="_blank">link </a>e ter informações mais detalhadas.</p>
<p class="MsoNormal"> </p>
<blockquote><p class="MsoNormal">É importante lembrar que o SQLCMD está disponível para o SQL Server 2005 e 2008. Para versões anteriores utilize o <em>OSQL </em>ou <em>ISQL</em>.</p>
</blockquote>
<p class="MsoNormal">Bom trabalho, bons estudos!</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Mendes</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/sql-server-via-prompt/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Verificando a existência de objetos</title>
		<link>http://silasmendes.com/dba/metadados-verificando-a-existencia-de-objetos</link>
		<comments>http://silasmendes.com/dba/metadados-verificando-a-existencia-de-objetos#comments</comments>
		<pubDate>Fri, 21 Aug 2009 14:17:22 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SQL SERVER 2000]]></category>
		<category><![CDATA[SQL SERVER 2005]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[SQL SERVER 7]]></category>
		<category><![CDATA[colunas]]></category>
		<category><![CDATA[information_schema]]></category>
		<category><![CDATA[metadados]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[syscolumns]]></category>
		<category><![CDATA[sysobjects]]></category>
		<category><![CDATA[tabelas]]></category>

		<guid isPermaLink="false">http://silasmendes.com/dba/?p=230</guid>
		<description><![CDATA[Uma necessidade comum de muitos desenvolvedores é verificar a existência de objetos no banco de dados. Veja nesse artigo como fazer isto, consultando os metadados do SQL Server.]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal">Uma necessidade comum de muitos desenvolvedores é verificar a existência de objetos no banco de dados. Então vou fazer aqui uma rapidinha com exemplos bem básicos, pras situações mais comuns, vamos lá:</p>
<p class="MsoNormal">A tabela <strong>tb_Pedido</strong> existe no banco?</p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">use</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> [meuBanco]</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">GO</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">if</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"><span style="mso-spacerun: yes;"> </span><span style="color: gray;">exists</span> </span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: gray; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">(</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">select</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> <span style="color: gray;">*</span> <span style="color: blue;">from</span> information_schema<span style="color: gray;">.</span>tables <span style="color: blue;">where</span> table_name <span style="color: gray;">=</span> <span style="color: red;">&#8216;tb_pedido&#8217;</span><span style="color: gray;">)</span></span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-no-proof: yes;">print</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-no-proof: yes;"> <span style="color: red;">&#8216;Tabela existe&#8217;</span></span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-no-proof: yes;">else</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-no-proof: yes;">print</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-no-proof: yes;"> <span style="color: red;">&#8216;Tabela não existe&#8217;</span></span></p>
<p class="MsoNormal"> </p>
</blockquote>
<p class="MsoNormal">Quais tabelas no banco possuem a coluna <strong>cod_cliente</strong>?</p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">use</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> [meuBanco]</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-no-proof: yes;">GO</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">select</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> table_name<span style="color: gray;">,</span> data_type </span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">from</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> information_schema<span style="color: gray;">.</span>columns </span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">where</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> column_name <span style="color: gray;">=</span> <span style="color: red;">&#8216;cod_cliente&#8217;</span></span></p>
</blockquote>
<p class="MsoNormal"><span style="mso-ansi-language: EN-US;" lang="EN-US"> </span></p>
<p class="MsoNormal">A coluna <strong>cod_cliente</strong> existe na tabela <strong>tb_Pedido</strong>? Se não existe, adicionar:</p>
<blockquote>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-no-proof: yes;">use</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-no-proof: yes;"> [meuBanco]</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">GO</span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">if</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"><span style="mso-spacerun: yes;"> </span><span style="color: gray;">exists</span> </span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: gray; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">(</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">select</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> <span style="color: gray;">*</span> <span style="color: blue;">from</span> information_schema<span style="color: gray;">.</span>columns </span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US">where</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"> table_name <span style="color: gray;">=</span> <span style="color: red;">&#8216;tb_pedido&#8217;</span> <span style="color: gray;">and</span> column_name <span style="color: gray;">=</span> <span style="color: red;">&#8216;cod_cliente&#8217;</span><span style="color: gray;">)</span></span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-ansi-language: EN-US; mso-no-proof: yes;" lang="EN-US"><span style="mso-tab-count: 1;"> </span></span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-no-proof: yes;">print</span><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; mso-no-proof: yes;"> <span style="color: red;">&#8216;Coluna existe.&#8217;</span></span></p>
<p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"><span style="font-size: 10.0pt; font-family: &quot;Courier New&quot;; color: blue; mso-no-proof: yes;">else</span></p>
<p class="MsoNormal"><span style="font-size: 10.0pt; line-height: 115%; font-family: &quot;Courier New&quot;; mso-no-proof: yes;"><span style="color: blue;">alter</span> <span style="color: blue;">table</span> tb_pedido <span style="color: blue;">add</span> cod_cliente <span style="color: blue;">int</span></span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size: 10.0pt; line-height: 115%; font-family: &quot;Courier New&quot;; mso-no-proof: yes;"><span style="color: blue;"><br />
</span></span></p>
<p class="MsoNormal">Observe que nos três exemplos acima, utilizamos as seguintes views de metadados:</p>
<ul>
<li><strong>information_schema.tables</strong> – que apresenta diversas informações sobre as tabelas de um banco.</li>
<li><strong>information_schema.columns</strong> – que apresenta informações sobre as colunas, das tabelas de um banco.</li>
</ul>
<p class="MsoNormal">Ok, mas afinal o que são <strong>METADADOS</strong>?</p>
<p class="MsoNormal">A definição mais comum é: <strong>informação sobre os dados</strong>. Esta definição não é muito amigável, eu sei, mas o que você precisa saber é que todos os objetos que você cria no banco, como tabelas, procedures, índices, etc, tem suas informações armazenadas em <strong>tabelas de sistema</strong> do SQL Server e as views utilizadas neste post buscam esses dados nas tabelas de sistema.</p>
<p class="MsoNormal">Comentaremos mais sobre metadados em outro posts, mas se você deseja se aprofundar no assunto, dê uma estudada neste <a href="http://msdn.microsoft.com/en-us/library/ms186778.aspx" target="_blank">link</a>.</p>
<p class="MsoNormal">Até +</p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/metadados-verificando-a-existencia-de-objetos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consultando objetos do banco</title>
		<link>http://silasmendes.com/dba/sql-server-consultando-metadados</link>
		<comments>http://silasmendes.com/dba/sql-server-consultando-metadados#comments</comments>
		<pubDate>Tue, 02 Sep 2008 23:15:03 +0000</pubDate>
		<dc:creator>Silas Mendes</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SQL SERVER 2000]]></category>
		<category><![CDATA[SQL SERVER 2005]]></category>
		<category><![CDATA[SQL SERVER 2008]]></category>
		<category><![CDATA[SQL SERVER 2008 R2]]></category>
		<category><![CDATA[SQL SERVER 7]]></category>
		<category><![CDATA[information_schema]]></category>
		<category><![CDATA[metadados]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[system table]]></category>

		<guid isPermaLink="false">http://diariodba.wordpress.com/?p=76</guid>
		<description><![CDATA[  Durante o processo de desenvolvimento é comum realizar consultas a metadados, ou seja, consultas que retornam informações sobre o próprio banco; algo como a consulta abaixo,  que retorna todas as tabelas de um determinado banco, junto com o nome de suas colunas e o tipo de dados: SELECT t.name nome_tabela, c.name nome_coluna, ty.name tipo_dado [...]]]></description>
			<content:encoded><![CDATA[<p style="margin:0 0 10pt;"> </p>
<p style="margin:0 0 10pt;">Durante o processo de desenvolvimento é comum realizar consultas a metadados, ou seja, consultas que retornam informações sobre o próprio banco; algo como a consulta abaixo,  que retorna todas as tabelas de um determinado banco, junto com o nome de suas colunas e o tipo de dados:</p>
<blockquote><p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:'Courier New';">SELECT</span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>t<span style="color:#808080;">.</span>name <span> </span>nome_tabela<span style="color:#808080;">,</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>c<span style="color:#808080;">.</span>name <span> </span>nome_coluna<span style="color:#808080;">,</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>ty<span style="color:#808080;">.</span>name <span> </span>tipo_dado</span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:'Courier New';">FROM</span><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span></span><span style="font-size:10pt;color:#008000;font-family:'Courier New';">sysobjects</span><span style="font-size:10pt;font-family:'Courier New';"> t<span style="color:#808080;">,</span> <span style="color:#008000;">syscolumns</span> c<span style="color:#808080;">,</span> <span style="color:#008000;">systypes</span> ty</span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:'Courier New';">WHERE</span><span style="font-size:10pt;font-family:'Courier New';"> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>t<span style="color:#808080;">.</span>id <span style="color:#808080;">=</span> c<span style="color:#808080;">.</span>id <span style="color:#808080;">AND</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>t<span style="color:#808080;">.</span><span style="color:#0000ff;">type</span> <span style="color:#808080;">=</span> <span style="color:#ff0000;">&#8216;U&#8217;</span> <span style="color:#808080;">AND</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:'Courier New';"><span> </span>c<span style="color:#808080;">.</span>xtype <span style="color:#808080;">=</span> ty<span style="color:#808080;">.</span><span style="color:#0000ff;">type</span></span></p>
</blockquote>
<p style="margin:0 0 10pt;"> </p>
<p style="margin:0 0 10pt;">Isto está errado?</p>
<p style="margin:0 0 10pt;"><strong>Não.</strong></p>
<p style="margin:0 0 10pt;">No entanto não é uma <em>boa prática</em> realizar consultas diretamente nas tabelas de sistema. Além do esforço em entender a estrutura dessas informações e construir a query, existe a possibilidade de no futuro a Microsoft descontinuar ou alterar a estrutura de umas dessas tabelas. <em>E aí?</em> O que acontece com sua aplicação que estava buscando dados naquela estrutura?</p>
<p style="margin:0 0 10pt;">Para evitar esse tipo de problemas, a partir da versão 7 do Microsoft SQL Server surgiram as <em>Information Schema Views,</em> um catálogo de views de metadados desenvolvidas de acordo com padrões ISO, onde a idéia é que os dados serão retornados, independente da versão do SQL Server, logo se houverem mudanças nas tabelas de sistema, sua aplicação não será afetada porque ela está buscando dados de uma view, além disso, a forma de consulta é muito simples. Veja:</p>
<p style="margin:0 0 10pt;">Se você quer obter os mesmos dados da consulta acima utilizando uma dessas views, precisa somente disto:</p>
<blockquote><p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">SELECT</span><span style="font-size:10pt;font-family:&quot;"> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:&quot;"><span> </span>TABLE_NAME<span style="color:#808080;">,</span> COLUMN_NAME<span style="color:#808080;">,</span> DATA_TYPE</span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">FROM</span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:10pt;line-height:115%;font-family:&quot;"><span> </span><span style="color:#008000;">INFORMATION_SCHEMA</span><span style="color:#808080;">.</span><span style="color:#008000;">COLUMNS</span></span></p>
</blockquote>
<p style="margin:0 0 10pt;"> </p>
<p style="margin:0 0 10pt;">Veja como é mais simples.</p>
<p style="margin:0 0 10pt;">Quer consultar todas as tabelas de sua base que comecem com <em>tb_pedido</em>? Então tente isso:</p>
<blockquote><p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:small;font-family:Calibri;"> <span style="font-family: Georgia; line-height: normal; color: #0000ff;">SELECT</span></span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:&quot;"><span> </span>TABLE_NAME </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">FROM</span><span style="font-size:10pt;font-family:&quot;"> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:&quot;"><span> </span><span style="color:#008000;">INFORMATION_SCHEMA</span><span style="color:#808080;">.</span><span style="color:#008000;">TABLES</span> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">WHERE</span><span style="font-size:10pt;font-family:&quot;"> </span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:10pt;line-height:115%;font-family:&quot;"><span> </span></span><span style="font-size:10pt;line-height:115%;font-family:&quot;">TABLE_NAME <span style="color:#808080;">like</span> <span style="color:#ff0000;">&#8216;tb_pedido%&#8217;</span></span></p>
</blockquote>
<p class="MsoNormal" style="margin:0 0 10pt;"> </p>
<p style="margin:0 0 10pt;"> </p>
<p style="margin:0 0 10pt;">Se quiser consultar todas as procedures que iniciam com <em>‘listar%’</em> utilize:</p>
<blockquote><p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">SELECT</span><span style="font-size:10pt;font-family:&quot;"> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:&quot;"><span> </span><span style="color:#808080;">*</span> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">FROM</span><span style="font-size:10pt;font-family:&quot;"> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;font-family:&quot;"><span> </span><span style="color:#008000;">INFORMATION_SCHEMA</span><span style="color:#808080;">.</span><span style="color:#008000;">ROUTINES</span> </span></p>
<p class="MsoNormal" style="line-height:normal;margin:0;"><span style="font-size:10pt;color:#0000ff;font-family:&quot;">WHERE</span><span style="font-size:10pt;font-family:&quot;"> </span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:10pt;line-height:115%;font-family:&quot;"><span> </span></span><span style="font-size:10pt;line-height:115%;font-family:&quot;">SPECIFIC_NAME <span style="color:#808080;">like</span> <span style="color:#ff0000;">&#8216;listar%&#8217;</span> <span style="color:#808080;">and</span> ROUTINE_TYPE <span style="color:#808080;">=</span> <span style="color:#ff0000;">&#8216;PROCEDURE&#8217;</span></span></p>
</blockquote>
<p style="margin:0 0 10pt;"> </p>
<p style="margin:0 0 10pt;">Além destas existem outras views que podem te auxiliar na consulta a metadados. Veja uma  lista completa <a title="Views Metadados" href="http://msdn.microsoft.com/en-us/library/ms186778.aspx" target="_blank">aqui</a>.</p>
<p style="margin:0 0 10pt;">Bom trabalho!</p>
<p class="MsoNormal" style="margin:0 0 10pt;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://silasmendes.com/dba/sql-server-consultando-metadados/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

