Articles tagged with: T-SQL

Impressões sobre o Exame 70-461: SQL Server 2012 – Querying

query

Boa noite 🙂

Quarta passada tive êxito no exame 70-461: Querying, o primeiro capítulo da trilogia MCSA.

Se você não conhece o funcionamento sobre a nova trilha certificação, verifique este link, baixe os webcasts e veja como funciona.

Dei uma folheada Training Kit 70-461 e usei como base séria o Skills Measure . Pra não sair no escuro, dei uma lida também, durante um bom tempo, em impressões de outros profissionais que fizeram essa prova. Você pode dar uma pesquisada na internet que com certeza acha. Só pra saber onde eu direcionava mais atenção. E meu post tem esse intuito, de quem sabe, fazer essas dicas úteis pra quem vai prestar o exame.

A forma de prática foi o Prep-Kit, que vem junto com o Training Kit.
Recomendo o uso do Prep-kit apenas para reforçar conceitos e revisar comandos e não para pegar o ritmo da prova, que é bem diferente, sendo supérfluo e sem complexidade alguma! Não tem como comparar o nível de dificuldade do Prep-kit com a prova, btw.

O que mais me prejudicou na prova, e sim, prepare pra rir: marquei, sem querer, a prova em Português. Não cometa esse erro jamais na sua vida. As traduções em português não estão “ruins”, só não estão compatíveis com o bom senso. Por exemplo, é fácil reconhecer VIEWS em banco de dados, mas não “Modos de Exibição”. Teve vários termos, que eu nem consigo mais lembrar de tão exóticos que são. Alguns traduzidos de forma extremamente literal. Até demais. “Larga de frescura rapaz!” – disse alguém. Mas quero ver esse alguém sacar NA HORA o que significa “Função definida pelo usuário com valor de tabela”. Rola um WAITFOR na cabeça, pelo menos na minha. A massa cinza até processa a tradução mas não na hora 🙂

Enfim, compartilho algumas dicas importantes pra quem for prestar o exame:

– Aprenda e PRATIQUE todos os tipos de função, principalmente as TVF (Table Value Functions);

– FOR XML PATH, AUTO e RAW. Vai cair, saiba o que cada cláusula traz e qual é a estrutura do XML. Saiba olhar para determinado XML e imaginar qual FOR XML gerou;

– Modos de Isolamento. Saiba qual causa mais bloqueios, o padrão do SQL Server, o que “versiona” os registros e o que evita leitura suja…

– Views indexadas. Saiba usar SCHEMABINDING. Aliás, views estão bastante em foco neste exame, inclusive para operações DML. De foco nessa parte!

– Relembre: INTERSECT, UNION, UNION ALL, DISTINCT,  ALL, SOME, ANY, RANK FUNCTION…

– CONSTRAINTS em geral. Computed Columns, inclusive com funções;

– Questões DRAG and DROP parecem fáceis. Mas o ‘cão’ mora nos detalhes…Preste bastante atenção no enunciado da questão. Por exemplo, se na questão disse que o usuário USRXPTO já possui acesso de leitura na tabela XPTO, e você deve ALTERAR a tabela mantendo as permissões, você não vai dar um DROP, CREATE e GRANT ou seja lá o que for desnecessários, certo? Se você for alterar, nesse caso, também não precisa do GRANT. Saiba também que criar um campo NOT NULL em tabela já populada não é nenhum almoço grátis. Saiba como resolver esse tipo de pedido.Enfim, parece besteira, mas quem não pratica isso ou nunca teve experiência, pode perder muitos pontos com questões do gênero.

– Essa prova tem um foco exagerado em views (já falei, mas reforço). Pratique inserir/atualizar/deletar alguns registros nela (sim, é possível, via trigger instead of). Inclusive em views que possuem SELECT em mais de uma tabela (dica de ouro);

– Planos de Execução: Aprenda as formas de visualizá-lo;

– Tabelas inserted e deleted + triggers são essenciais. Aliás triggers foram assuntos bem presentes, não tanto quanto VIEWS, mas quase;

– Cairam algumas cláusulas novas: LEAD, LAG , EOMONTH, FORMAT, TRY_CONVERT, PARSE, dentre outros. Inclusive, caiu uma questão de EOMONTH combinada com DATEADD que me confundiu bastante, principalmente por não ter oportunidade de validar o código ):

– Saiba o que faz um PIVOT, UNPIVOT e APPLY (Outer e Cross). Não precisa focar seu estudo nisso (estou pensando em economia de tempo), apenas saiba em que situação aplicar;

– Diferencie newid e newsequentialid, saiba o que cada um faz e TESTE!

– Pratique abrir transações com tratamento de erros. Nada complexo pra quem já trabalha com T-SQL: TRY, CATCH, @@ERRORCOUNT e outras variáveis comuns à transações podem cair. Conhecer o funcionamento do XACT_ABORT e conhecer Triggers que fazem o uso deste tipo de programação é fundamental!

Creio que são informações úteis para quem está estudando. Claro que a prova vai muito além, e esses tópicos acima estiveram presentes no exame que fiz, então, reforço, não deixe de estudar pelo Skills Measure e não se limite ao que foi dito acima.

Uma coisa que me chamou bastante a atenção é que conhecer T-SQL, mas não praticar pode ser um perigo potencial no exame. Existem alguns peguinhas que só quem codifica no dia a dia e executa vai identificar. Parece uma frase clichê, e não deixa de ser, mas é uma verdade crua nessa prova.

E  Socorro, se tiver lendo isto, obrigado pelas dicas e conhecimentos trocados, especialmente as de XML o/

E é isso pessoal.

Estou estudando agora para a 70-462 agora e já tô preocupado com a 70-463 (BI).

[]’s

Desafio #1 T-SQL

Divagação sobre momento + desafio TSQL

Bom dia!

Vi no blog do Vitor Fava (http://vfava.wordpress.com/) uma recomendação de sites com desafios de T-SQL.
Perfeita ocasião pra voltar a dar mais uma revisada na codagem!
Decidi então trazer alguns deles pra cá por dois motivos:

1) Incentivar você, leitor (se tiver afim é claro) de praticar (e reforçar o que você já sabe);
2) Transmitir uma forma de pensar diferente ou nova de lógica;

O crédito pelas questões é do site http://beyondrelational.com/, que é bem legal, e recomendo, pra quem curte desafios que visite sem medo de ser feliz (a não ser que você já seja um coder-monster, aí no caso você iria só pra brincar mesmo).

Toda semana, por períodos irregulares, irei trazer os desafios que eu acho interessante e postar aqui.
Quem quiser postar uma solução, pode fazê-lo no site ou aqui mesmo, pra gente compartilhar pontos de vista diferentes. Eu postarei a minha solução comentada sobre o exercício em outro  post pra não alongar esse aqui demais. Provavelmente esse final de semana! Já tá pronto aqui, só aguardando a oportunidade 🙂

Vamos ao enunciado:

Link da questão original: http://beyondrelational.com/modules/19/tsql-beginners/297/tsql-beginners-challenge-1-find-the-second-highest-salary-for-each-department.aspx?tab=info

Enunciado: O desafio é listar os funcionários com o segundo maior salário de cada departamento. Se dois funcionários tiverem o mesmo salário, você precisa listá-los também!

Regra: Sua solução deve funcionar no SQL Server 2005 ou superior, e a ordernação deve ser feita pelo salário.

Restrição: A solução deve ser apresentada em apenas uma consulta que comece com WITH ou SELECT. Ou seja, pode usar CTE? Pode tio(a). Pode usar tabela temporária, etc? Não tio(a), não pode.

Dados de amostra

Resultado esperado

Código da amostra:

Algumas dicas pra quem se sentir perdido (só leia isso se sentir bastante dificuldade):

1) Usar CTE (Common Table Expressions) é a forma mais fácil de fazer, na minha opinião;

2) Dê uma olhada nas Windows Functions, são o santo graal pra Ad-hoc Queries e vai resolver fácil essa questão .

3) Não veja a solução no site (existe a mesma disponível lá na aba solutions). Tente fazer pra aprender . Não é nada complexo e não exige muita leitura.

A solução será postada em outro post com explicações (farei isso final de semana ou na segunda). Se quiser ver a resposta (de novo, não recomendo) que ainda não tem as explicações mais atenciosas que farei na próxima postagem, clique aqui!

Até mais!