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!