quarta-feira, 12 de setembro de 2012

Comunicado


Boa Noite Senhoooores!!

               Como a ideia deste blog é ser um guia definitivo para certificações em SQL Server criei uma nova área que é a “Guia de Provas”. Nela irei colocar todos os conteúdos dos exames que consta no site da Microsoft e logo ao lado de cada tópico constará o link para um post no blog que aborde o tema. Acredito que seguindo esta organização a experiência de quem visita o site vai ser de escolher o que quer ler e ir direto ao ponto!

quinta-feira, 6 de setembro de 2012

Prova Marcada!!


Boa Noite Senhooooores!!!

               Agora é oficial! Agendei a minha prova para este mês de setembro e ainda com um desconto bacana da Microsoft! Neste link você consegue um voucher para todas as provas do MCSA em SQL Server 2012 com 15% de desconto e todas as provas com Second Shot(caso não passe na prova de primeira, você pode fazer ela de novo sem pagar nada mais por isso!).

               Vou aumentar a minha carga horaria de estudos, já que estou na reta final, e para isso segue um blog que irei ler por completo com o resumo de tudo o que será cobrado na prova.

               Mudando de assunto, estava eu na firma fazendo uma pesquisa e utilizei o PIVOT que é conhecido por transformar linhas em colunas. Existe uma grande expectativa neste cara mas desde a sua criação ele ainda não convenceu devido as suas limitações(saber previamente as colunas no resultado final). Um caso bastante comum de utilizar este cara é para fazer um somatório mensal de várias categorias:

SELECT            Title
,                 [1]
,                 [2]
,                 [3]
,                 [4]
,                 [5]
,                 [6]
,                 [7]
,                 [8]
,                 [9]
,                 [10]
,                 [11]
,                 [12]
FROM        (
      SELECT            Title
      ,                 EmployeeID
      ,                 qtd               = MONTH(BirthDate)
      FROM              [AdventureWorks].[HumanResources].[Employee]   E
) x
PIVOT ( COUNT(EmployeeID) FOR qtd IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) AS pvt

               Por mais que eu não goste de usar o PIVOT, vez ou outra p/ relatório ele é uma boa saída.  Fica aí o exemplo e mesmo que existam outras maneiras de se fazer esse somatório, usar o PIVOT deixa com que o SQL se preocupe com a melhor maneira de recuperar os dados que geralmente costuma ser a saída mais performática!

quarta-feira, 29 de agosto de 2012

DATA TYPE PRECEDENCE


Faaaala pessoal,

               Continuando a ideia de precedência do post anterior hoje irei comentar um pouco sobre as conversões implícitas. Quando estamos realizando operações entre mais de um campo, tipicamente em uma consulta, pode acontecer de que os tipos de dados das colunas sejam diferentes. Neste caso, pode acontecer também que o desenvolvedor, aspirante a DBA, esqueça de fazer a conversão:

               SELECT      1 + '2'

               E aí? Qual será o resultado? Vai dar erro? Bom, esse peguinha é mais rodado do que pratinho de micro-ondas. O que acontece é que no SQL existe uma ordem DATA TYPE PRECEDENCE que converte implicitamente a coluna de menor precedência para a de maior. 

               

Confuso não? Essa matriz esta na documentação da MSDN do CAST e do CONVERT, mas resumindo e colocando os tipos mais comuns temos a seguinte fila:

BINARY < CHAR < VARCHAR < TIMESTAMP < TEXT < BIT < TINYINT < SMALLINT < INT < BIGINT < SMALLMONEY < MONEY < DECIMAL < SMALLDATETIME < DATETIME < XML

            Onde o BINARY possui a menor precedência e o XML a maior. Vale lembrar que quando os tipos de dados não são compatíveis (converter um BIT p/ XML) o SQL vai cuspir um erro de conversão. E se a conversão implícita não é a desejada, pode-se explicitar para atender a sua regra de negocio. Em minha opinião tente fugir de conversões, mas se tiver de fazer, sempre faça explicitamente!

           Link p/ a precedência completa.

            Exame 70-461: Caros, terminei o curso da Microsoft essa semana e agora chegou a hora de marcar a prova. Após esta publicação irei cuidar deste assunto!

quarta-feira, 22 de agosto de 2012

Ordem Lógica de Execução


Boa Noite Senhoreeeees!!

                Hoje já estou em um pouco mais da metade do curso preparatório para o exame 70-461, o primeiro passo para ser um MCSA da Microsoft em SQL Server 2012. As minhas impressões são de que se você já trabalha com pesquisas e se aprofundou um pouco mais sabendo bem as diferenças entre os OUTER’s , usando CTE’s, agrupamento e TRY CATCH provavelmente você já esta preparado para fazer o exame. Mas certeza mesmo eu só terei depois de prestar o exame o que deve ser em breve!
                Uma informação que eu achei legal é sobre a ordem de execução de uma Query. Chamada de Logical Query Processing Phase o SQL Server processa uma pesquisa na ordem descrita abaixo:


                Diferente do senso comum de achar que o código é executado tudo de cima para baixo, saber essa ordem explica o fato de você poder referenciar ALIAS de colunas na clausula ORDER BY e não poder utilizar no GROUP BY pois segundo esta ordem o SQL ainda não passou pela fase de projeção que é o SELECT.

quarta-feira, 15 de agosto de 2012

Nova certificação! Mas já??


Caros,
             
            Nestes últimos dias eu estava olhando o site da Microsoft e eles mudaram as regras p/ as certificações de SQL Server. Para começar o Exame 70-433, que era o meu foco, será aposentado! E agora para tirar a certificação inicial que se chama MCSA é necessário fazer 3 provas conforme a imagem abaixo.


Sim, terei que mudar o meu esquema tático! Portanto.. Agora estou estudando para o Exame 70-461. O ponto positivo dessa mudança é que se tudo correr bem, eu saio com a certificação do SQL Server 2012 já na crista da onda!!
Minha estratégia para essa primeira prova será o curso da própria Microsoft preparatório para este exame que você confere aqui e que eu comecei no inicio desta semana, portanto Fiquem Ligadinhos!

Neste Link você encontra uma pequena explicação sobre o novo esquema de certificações.

terça-feira, 7 de agosto de 2012

CROSS APPLY


Boa Noite senhoreeeees!!! Hoje eu vou falar sobre o APPLY. Esse cara serve para fazer uma espécie de JOIN só que sem a clausula ON onde o INNER esta para o CROSS assim como o LEFT ou o RIGHT para o OUTER. Isso resulta em coisas do tipo:

SELECT      T.Nome
,           CA.Nome
,           CA.Gols
FROM        time       T
CROSS APPLY (SELECT * FROM jogador J WHERE J.idTime = T.idTime) CA

Que tem exatamente o mesmo plano de execução e resultado disso aqui:
SELECT      T.Nome
,           J.Nome
,           J.Gols
FROM        time        T
INNER JOIN  Jogador     J
ON          J.idTime    = T.idTime

Então o que torna esse cara especial? Em minha opinião e experiência uma das coisas mais interessantes e com um grande potencial são as pesquisas com o TOP(n) onde o n tem uma variação de acordo com a regra de negócio em questão e, ainda mais importante, o fato de você conseguir fazer consultas com funções que retornam tabelas!
CREATE FUNCTION Exemplo(@id AS int, @n AS INT)
      RETURNS TABLE
AS
RETURN
      SELECT      TOP(@n)     *
      FROM        jogador     j
      WHERE       j.idTime    = @id
      ORDER BY    j.Gols      DESC
GO

SELECT            *
FROM        Time  t
CROSS APPLY dbo.Exemplo(t.idTime, CASE WHEN(t.idTime=1) THEN 1 ELSE 2 END)
ORDER BY    t.IdTime    ASC

Vejam que as possibilidades com esse operador são grandes porem no dia a dia da “firma” são raros os casos onde ele pode/precisa ser utilizado.

Aqui tem um artigo que me inspirou a fazer esse post e caso alguém queira o .SQL com o script completo dos exemplos é só pedir.

quarta-feira, 1 de agosto de 2012

Apresentação


Pessoal,
               Criei este blog com um motivo bem especifico: estudar para a certificação 70-433 da Microsoft. Se você caiu aqui por uma pesquisa no Google então você certamente sabe do que se trata!  Caso negativo, clique aqui. Mas resumindo se trata de uma certificação para quem desenvolve soluções no SQL Server 2008.

               Escolhi compartilhar as minhas experiências no processo pois dizem por aí que a melhor maneira de consolidar o conhecimento é compartilhando/ensinando a alguém. Logo quem quiser aproveitar o conteúdo ou ate mesmo colaborar deixando um comentário estão  mais do que incentivados!