<?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>Arquivos t-sql - Diego Nogare</title>
	<atom:link href="https://diegonogare.net/tags/t-sql/feed/" rel="self" type="application/rss+xml" />
	<link>https://diegonogare.net/tags/t-sql/</link>
	<description>Consultor Executivo de IA &#38; ML</description>
	<lastBuildDate>Wed, 26 Dec 2012 17:25:51 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/diegonogare.net/wp-content/uploads/2025/06/cropped-cropped-DN-Black-300x300-1.png?fit=32%2C32&#038;ssl=1</url>
	<title>Arquivos t-sql - Diego Nogare</title>
	<link>https://diegonogare.net/tags/t-sql/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">247556142</site>	<item>
		<title>Dicas para o exame 70-461 – Microsoft Querying SQL Server 2012</title>
		<link>https://diegonogare.net/2012/12/dicas-para-o-exame-70-461-microsoft-querying-sql-server-2012/</link>
		
		<dc:creator><![CDATA[Diego Nogare]]></dc:creator>
		<pubDate>Wed, 26 Dec 2012 17:25:51 +0000</pubDate>
				<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Informativo]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Virtual PASS BR]]></category>
		<category><![CDATA[certificacao]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[t-sql]]></category>
		<guid isPermaLink="false">http://diegonogare.net/?p=267</guid>

					<description><![CDATA[<p>Fala galera, na semana passada refiz a prova 70-461 – Querying SQL Server 2012, e desta vez passei \o/. É uma prova que força o nosso cérebro, e também exige escrita de códigos… Gostei do que vi na prova, exige bastante atenção e conhecimento. Não vou entrar nos detalhes dos assuntos que caíram na prova,...</p>
<p>O post <a href="https://diegonogare.net/2012/12/dicas-para-o-exame-70-461-microsoft-querying-sql-server-2012/">Dicas para o exame 70-461 – Microsoft Querying SQL Server 2012</a> apareceu primeiro em <a href="https://diegonogare.net">Diego Nogare</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Fala galera, na semana passada refiz a prova <strong>70-461 – Querying SQL Server 2012</strong>, e desta vez <strong>passei</strong> \o/. É uma prova que força o nosso cérebro, e também exige escrita de códigos… Gostei do que vi na prova, exige bastante atenção e conhecimento.</p>
<p>Não vou entrar nos detalhes dos assuntos que caíram na prova, porque o <strong>Luti</strong> fez isso neste post: <a href="http://luticm.blogspot.com.br/2012/03/impressoes-da-prova-70-461.html" target="_blank" rel="noopener noreferrer">Impressões da prova 70-461</a></p>
<p>Minha idéia é ajudar você a ver e entender um pouco de alguns códigos T-SQL referente aos assuntos que caíram na prova. Não são só esses tópicos que caíram, mas esses já te ajudam a ter uma idéia de uma parte da prova. Dentro <a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-461" target="_blank" rel="noopener noreferrer">deste link</a>, vá até a sessão <strong>Skills Measures</strong>, e conheça todos os assuntos cobrados na prova.</p>
<p>Outro ponto interessante para estudar é o <strong>Training Kit</strong> deste exame, que você pode comprar diretamente no site da <a href="http://shop.oreilly.com/product/0790145345059.do" target="_blank" rel="noopener noreferrer">O’Reilly clicando aqui</a>. Compramos este eBook aqui onde eu trabalho, e ajudou bastante para revisar os itens do exame.</p>
<p>O código T-SQL abaixo possui as explicações diretamente nos comentários acima de cada bloco de código. Podem copiar e colar no SQL Server Management Studio para ver a formatação do código e executar passo a passo para ver os resultados e entender as diferenças&#8230;</p>
<pre class="csharpcode"><span class="kwrd">use</span> tempdb
<span class="kwrd">go</span>

<span class="rem">-- drop table tbNogare</span>
<span class="kwrd">create</span> <span class="kwrd">table</span> tbNogare (id <span class="kwrd">int</span> <span class="kwrd">identity</span>(1,1), nome <span class="kwrd">varchar</span>(5))
<span class="kwrd">GO</span>
insert <span class="kwrd">into</span> tbNogare <span class="kwrd">values</span> (<span class="str">'AAA'</span>),(<span class="str">'BBB'</span>),(<span class="str">'CCC'</span>),(<span class="str">'AAA'</span>)
                   ,(<span class="str">'DDD'</span>),(<span class="str">'DDD'</span>),(<span class="str">'EEE'</span>),(<span class="str">'EEE'</span>),(<span class="str">'AAA'</span>)
<span class="kwrd">GO</span>

/* <span class="kwrd">TOP</span> (x) <span class="kwrd">WITH</span> TIES <span class="rem">-- Adiciona as ocorrencias repetidas do ultimo item </span>
encontrado */
<span class="kwrd">select</span> <span class="kwrd">top</span> (1) <span class="kwrd">with</span> ties nome <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> nome
<span class="kwrd">select</span> <span class="kwrd">top</span> (5) <span class="kwrd">with</span> ties nome <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> nome
<span class="kwrd">select</span> <span class="kwrd">top</span> (6) <span class="kwrd">with</span> ties nome <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> nome

/* OFFSET <span class="kwrd">FETCH</span> <span class="rem">-- cria paginação, iniciando em um registro e </span>
informando quantos outros devem surgir */
<span class="kwrd">select</span> id, nome <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> ID 
offset 4 <span class="kwrd">rows</span> <span class="kwrd">fetch</span> <span class="kwrd">first</span> 2 <span class="kwrd">rows</span> <span class="kwrd">only</span>

/* <span class="kwrd">CROSS</span> <span class="kwrd">JOIN</span> <span class="rem">-- cria um Produto Cartesiano, multiplicando todos os </span>
itens da tabela 1 por todos da tabela 2. Inclusive aplicando filtros */
<span class="kwrd">select</span> I.id, N.nome
<span class="kwrd">from</span> tbNogare I <span class="kwrd">cross</span> apply tbNogare N
<span class="kwrd">where</span> I.id &lt; 3

<span class="kwrd">select</span> t2.id, t2.nome, t1.id, T1.nome <span class="kwrd">from</span> tbNogare t2
<span class="kwrd">cross</span> apply (<span class="kwrd">select</span> t.id, t.nome <span class="kwrd">from</span> tbNogare T <span class="kwrd">where</span> t.id &gt;= 4) T1
<span class="kwrd">where</span> t2.id = 2

/* <span class="kwrd">Table</span> <span class="kwrd">Value</span> <span class="kwrd">Function</span> - Retornar uma tabela através de uma função */
<span class="kwrd">CREATE</span> <span class="kwrd">FUNCTION</span> dbo.FuncaoTabular (@id <span class="kwrd">int</span>) <span class="kwrd">RETURNS</span> <span class="kwrd">TABLE</span>
<span class="kwrd">AS</span>
<span class="kwrd">RETURN</span> (<span class="kwrd">SELECT</span> nome <span class="kwrd">from</span> tbNogare <span class="kwrd">where</span> id &gt;= @id)

<span class="kwrd">select</span> * <span class="kwrd">from</span> FuncaoTabular(2)
<span class="kwrd">select</span> * <span class="kwrd">from</span> FuncaoTabular(4)
<span class="kwrd">select</span> * <span class="kwrd">from</span> FuncaoTabular(7)

/* WINDOWS FUNCTIONS */
<span class="rem">-- Ultimo dia do mês, inserindo um mês como parametro</span>
<span class="kwrd">select</span> EOMONTH(getdate(),-1) <span class="rem">-- o parametro negativo, retorna os meses.</span>
<span class="kwrd">select</span> EOMONTH(getdate(),0) <span class="rem">-- o parametro zero, retorna o mês atual.</span>
<span class="kwrd">select</span> EOMONTH(getdate(),1) <span class="rem">-- o parametro positivo, avança os meses.</span>

<span class="rem">-- Windows Functions</span>
<span class="kwrd">select</span> 
 first_value(id) <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> id) primeiro
,lag(id) <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> id) anterior
,id
, lead(id) <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> id) seguinte
, last_value(id) <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> id) ultimo
<span class="kwrd">from</span> tbNogare
<span class="kwrd">where</span> id <span class="kwrd">in</span> (3,4,5,6)

<span class="rem">-- Ranking agrupado pela quebra e mantendo o count do numero da linha</span>
<span class="kwrd">select</span> RANK() <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> nome) item, nome
        <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> nome

<span class="rem">-- Ranking agrupado pela quebra e continuando o count do numero da linha</span>
<span class="kwrd">select</span> DENSE_RANK() <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> nome) item, nome 
        <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> nome

<span class="rem">-- Ranking agrupado pela quebra e dividindo o numero </span>
<span class="rem">-- das linhas pelo parametro</span>
<span class="kwrd">select</span> ntile(4) <span class="kwrd">over</span> (<span class="kwrd">order</span> <span class="kwrd">by</span> nome) item, nome
        <span class="kwrd">from</span> tbNogare <span class="kwrd">order</span> <span class="kwrd">by</span> nome

/* XML */
<span class="rem">-- FOR XML RAW --&gt; por padrão, apresenta os dados </span>
<span class="rem">-- em atributos (dentro da tag)</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml raw
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml raw (<span class="str">'Linha'</span>) <span class="rem">-- Nome da linha</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml raw (<span class="str">'Linha'</span>), elements <span class="rem">-- ELEMENTOS</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml raw (<span class="str">'Linha'</span>), root(<span class="str">'Raiz'</span>) <span class="rem">-- Nó raiz</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml raw (<span class="str">'Linha'</span>), elements, root(<span class="str">'Raiz'</span>)
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml raw (<span class="str">'Linha'</span>), elements, root(<span class="str">'Raiz'</span>)
        , XMLSCHEMA(<span class="str">'Nogare_70-461'</span>) <span class="rem">-- Adicionar XMLSchema</span>

<span class="rem">-- FOR XML AUTO --&gt; por padrão, apresenta os dados</span>
<span class="rem">-- em atributos (dentro da tag)</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml auto  <span class="rem">-- NÃO pode nome da linha</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml auto, elements  <span class="rem">-- ELEMENTOS</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml auto, root(<span class="str">'Raiz'</span>) <span class="rem">-- Nó raiz</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml auto, elements, root(<span class="str">'Raiz'</span>)
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml auto, elements, root(<span class="str">'Raiz'</span>)
        , XMLSCHEMA(<span class="str">'Nogare_70-461'</span>) <span class="rem">-- Adicionar XMLSchema</span>

<span class="rem">-- FOR XML PATH --&gt; por padrão, apresenta os dados em </span>
<span class="rem">-- elementos (fora da tag). Não suporta XMLSchema</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml <span class="kwrd">path</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml <span class="kwrd">path</span> (<span class="str">'Linha'</span>) <span class="rem">-- Nome da linha</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> tbNogare <span class="kwrd">for</span> xml <span class="kwrd">path</span> (<span class="str">'Linha'</span>), ROOT(<span class="str">'Raiz'</span>) <span class="rem">-- Nó raiz</span>

/* Coluna Computada */
<span class="rem">-- Retorno computado (calculo simples)</span>
<span class="kwrd">select</span> (ID * 2) <span class="kwrd">AS</span> COLUNA <span class="kwrd">from</span> tbNogare 

<span class="rem">-- Criação computada (calculo simples)</span>
<span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> #tbNogare (id <span class="kwrd">int</span> <span class="kwrd">identity</span>, valor <span class="kwrd">int</span>, dobro <span class="kwrd">as</span> valor *2 )
<span class="kwrd">GO</span>
insert <span class="kwrd">into</span> #tbNogare (valor) <span class="kwrd">values</span> (2),(3),(4)
<span class="kwrd">GO</span>
<span class="kwrd">select</span> * <span class="kwrd">from</span> #tbNogare
<span class="kwrd">GO</span>

/* <span class="kwrd">SEQUENCE</span> */
<span class="kwrd">CREATE</span> <span class="kwrd">SEQUENCE</span> seqNogare <span class="kwrd">AS</span> <span class="kwrd">INT</span>
INCREMENT <span class="kwrd">BY</span> 1 <span class="rem">-- Valor do incremento</span>
MINVALUE 1 <span class="rem">-- mínimo valor</span>
MAXVALUE 10 <span class="rem">-- máximo valor</span>
<span class="kwrd">CYCLE</span> <span class="rem">-- também pode ser NO CYCLE. Informa se volta pro começo ou não</span>
<span class="kwrd">START</span> <span class="kwrd">WITH</span> 5 <span class="rem">-- Informa o início do ciclo. Quando bater no valor máximo,</span>
             <span class="rem">-- volta pro início (valor mínimo)</span>

<span class="rem">-- É possível compartilhar uma sequence entre mais de um objeto</span>
<span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> #tbNogare2 (id <span class="kwrd">int</span>)
<span class="kwrd">CREATE</span> <span class="kwrd">TABLE</span> #tbNogare3 (id <span class="kwrd">int</span>)

insert <span class="kwrd">into</span> #tbNogare2(id) <span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seqNogare)
<span class="kwrd">go</span> 3
insert <span class="kwrd">into</span> #tbNogare3(id) <span class="kwrd">values</span> (<span class="kwrd">next</span> <span class="kwrd">value</span> <span class="kwrd">for</span> seqNogare)
<span class="kwrd">go</span> 5

<span class="kwrd">select</span> * <span class="kwrd">from</span> #tbNogare2
<span class="kwrd">select</span> * <span class="kwrd">from</span> #tbNogare3

/* <span class="kwrd">OUTPUT</span> */
INSERT <span class="kwrd">INTO</span> #tbNogare(valor)
<span class="kwrd">output</span> inserted.dobro <span class="rem">-- Retorna um valor quando inserido</span>
<span class="kwrd">values</span> (10)

<span class="kwrd">select</span> * <span class="kwrd">from</span> #tbNogare

<span class="kwrd">delete</span> <span class="kwrd">from</span> #tbNogare
<span class="kwrd">output</span> deleted.id <span class="rem">-- Retorna um valor quando deletado</span>
<span class="kwrd">where</span> valor = 10

<span class="kwrd">select</span> * <span class="kwrd">from</span> #tbNogare

/* <span class="kwrd">ISOLATION</span> <span class="kwrd">LEVEL</span> */
<span class="rem">-- READ COMMITED &gt;&gt; (default) Leitura de dados comitados (gera block)</span>
<span class="rem">-- READ UNCOMMITED &gt;&gt; Leitura de dados não comitados (leitura suja)</span>
<span class="rem">-- READ COMMITED SNAPSHOT &gt;&gt; Lê os ultimos dados comitados, qualquer </span>
<span class="rem">-- alteração, grava a origem da alteração no TempDB</span>
<span class="rem">-- REPEATABLE READ &gt;&gt; Lê o dado quantas vezes forem necessárias dentro</span>
<span class="rem">-- da transação. Mantém os dados que sofreram DELETES ou UPDATES</span>
<span class="rem">-- mas adiciona os que sofreram INSERT. (Leitura Fantasma)</span>
<span class="rem">-- SNAPSHOT &gt;&gt; Lê o dado comitado, sem ter leitura suja ou fantasma</span>
<span class="rem">-- SERIALIZABLE &gt;&gt; Trava as colunas utilizadas no SELECT, não permitindo</span>
<span class="rem">-- inserção de dados que alterem o resultado</span>

/* THROW */
<span class="kwrd">SELECT</span> * <span class="kwrd">FROM</span> tbNogare

<span class="kwrd">BEGIN</span> TRY
    INSERT tbNogare(ID) <span class="kwrd">VALUES</span>(1);
<span class="kwrd">END</span> TRY
<span class="kwrd">BEGIN</span> CATCH
    <span class="kwrd">PRINT</span> <span class="str">'-------0-------'</span>;
    THROW 50000, <span class="str">'&gt;&gt;&gt; SEU ERRO AQUI &lt;&lt;&lt;'</span>,0
<span class="kwrd">END</span> CATCH;

/* TRY <span class="kwrd">CONVERT</span> */
<span class="rem">-- Quando falhar, ao invés de erro ele retorna null</span>
<span class="kwrd">SELECT</span> <span class="kwrd">CONVERT</span>(<span class="kwrd">int</span>, <span class="str">'55'</span>)
<span class="kwrd">SELECT</span> <span class="kwrd">CONVERT</span>(<span class="kwrd">int</span>, <span class="str">'texto'</span>)
<span class="kwrd">SELECT</span> TRY_CONVERT(<span class="kwrd">int</span>, <span class="str">'66'</span>)
<span class="kwrd">SELECT</span> TRY_CONVERT(<span class="kwrd">int</span>, <span class="str">'texto'</span>)

/* TRY PARSE */
<span class="rem">-- Quando falhar, ao invés de erro ele retorna null</span>
<span class="kwrd">SELECT</span> PARSE(<span class="str">'44'</span> <span class="kwrd">as</span> <span class="kwrd">int</span>)
<span class="kwrd">SELECT</span> PARSE(<span class="str">'b'</span> <span class="kwrd">as</span> <span class="kwrd">int</span>)
<span class="kwrd">SELECT</span> TRY_PARSE(<span class="str">'33'</span> <span class="kwrd">as</span> <span class="kwrd">int</span>)
<span class="kwrd">SELECT</span> TRY_PARSE(<span class="str">'b'</span> <span class="kwrd">as</span> <span class="kwrd">int</span>)

<span class="kwrd">DROP</span> <span class="kwrd">TABLE</span> tbNogare
go</pre>
<p>&nbsp;</p>
<p>Aproveite que ainda está em época de <a href="https://diegonogare.net/2012/08/segunda-chance-gratuita-nos-exames-de-certificacao/" target="_blank" rel="noopener noreferrer">segunda chance</a>, e marque agora mesmo seu exame. Já pensou começar 2013 fazendo esta prova de <strong>SQL Server 2012</strong>??</p>
<p>Espero que isso lhe ajude a passar no exame, bons estudos!</p>
<p>O post <a href="https://diegonogare.net/2012/12/dicas-para-o-exame-70-461-microsoft-querying-sql-server-2012/">Dicas para o exame 70-461 – Microsoft Querying SQL Server 2012</a> apareceu primeiro em <a href="https://diegonogare.net">Diego Nogare</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">267</post-id>	</item>
	</channel>
</rss>
