Second Shot está de volta!

Segunda chance

Boa notícia pra quem está estudando pra tirar certificações Microsoft.

A Microsoft liberou ontem (30/08/2013) o Second Shot!
Pra quem não conhece, é literalmente, uma segunda chance: você marca o seu exame pela Prometric informando o voucher adquirido em um dos links abaixo, e se por acaso o pior acontecer, você poderá marcar uma segunda vez o mesmo exame sem cobrança alguma.

Vouchers expire on May 31, 2014. All exams, including retakes, must be taken by May 31, 2014.

Lembrando que, extremamente importante…É necessário informar o voucher no ato do primeiro agendamento. Muita gente não se atenta para esse detalhe e acaba por perder a segunda chance que tava ali de graça por vacilo 😀

É isso. Bons estudos pra quem está nessa empreitada. =)

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

SQL Server 2012 – Logical Functions e mais economia de código

logic

Boa noite 🙂

Outro post básico e rápido sobre funções lógicas (do mesmo grupo das já conhecidas estruturas lógicas, que envolvem WHILE, IF, CASE)…

Duas agradáveis adições foram realizadas no SQL Server 2012. Duas funções lógicas que já são velhas conhecidas para quem já programa(ou): IIF e CHOOSE.

IIF

(Documentação Oficial na MSDN para maior apronfudamento)

Também conhecido como IF ternário, nada mais, no contexto de algumas linguagens de programação, uma forma mais organizada de se fazer realizar uma escolha condicional entre dois valores utilizando uma expressão.

Estrutura:

IIF (boolean_expression, true_value, false_value) ou em bom português IIF (expressão_booleana, valorSeVerdadeiro, valorSeFalso)

É justamente pela estrutura que vem o nome de IF Ternário, por possui três elementos (parâmetros) em sua condição.

Seguem três exemplos pra posteriores comentários.

Em suma, como IF não pode ser utilizado em comandos SELECT deliberadamente para realizar condições, sendo utilizado mais em Stored Procedures e Funções, IIF serve como sintaxe alternativa para a função CASE, que faz exatamente o que a instrução IIF faria em uma instrução SELECT.  O que acho bacana nesse comando:

  • Sintaxe simples, limpa e direta (embora de começo pareça complexa);
  • Segue padrões .net (ao trabalhar com Integration Services, por exemplo, é uma cláusula largamente utilizada para faze comparações) e de outras linguagens;
  •  Economia de código, facilitando legibilidade;

Tem só um pequeno detalhe… Não estou dizendo que é um substituto pra CASE, por um simples e humilde motivo, e lógico ainda por cima:

CASE, assim como IF (em seu devido lugar) permitem mais de duas expressões lógicas. IIF é X, se não for X, ah meu amigo, é Y. Sem choro nem vela.

Códigos para expressar o sentimento:

Logo, é necessário avaliar qual a melhor construção para a sua lógica.

CHOOSE

Documentação Inicial na MSDN

Resumindo, assim como o IIF, o CHOOSE é outra cláusula condicional que pode, dependendo do caso, substituir o CASE. É mais uma construção bastante utilizada em .net e inclusive no Integration Services (Olha a MS casando particularidades de produtos “distintos” da suite  do SQL Server aos poucos aí!)

Vamos falar antes de sua construção:

A função CHOOSE vai retornar exatamente o valor que corresponde ao index passado no primeiro parâmetro:

O protocolo é claro. Existem cinco parâmetros dentro do CHOOSE. O primeiro vale um (1) e o último cinco (5). O número (index) passado é Quatro (4) então ele vai buscar o quarto valor nos parâmetros. No segundo exemplo, como ele não acha o parâmetro cujo valor é sete (7) ele simplesmente retorna NULO. A mesma coisa vale para o ZERO.
Outra aplicação prática:

But, contudo, todavia, todos os parâmetros devem ser do mesmo tipo, pois caso um dos valores esteja fora do padrão, ocorrerá um erro na execução. Veja só:

(6 row(s) affected)
Msg 245, Level 16, State 1, Line 7
Conversion failed when converting the varchar value ‘DOMINGO’ to data type int.

Enfim, alguns pontos positivos:

  • As mesmas vantagens do IIF

Minha única observação sobre a função é que poderia ser MUITO, mas MUITO útil caso fosse possível utilizar intervalos de valores, como é possível com CASE (usando BETWEEN por exemplo) e outras possibilidades lógicas. Acho o comando um pouco limitado no geral assim como o IIF. Mas tem quem gostará, com certeza. Qual a melhor escolha? A resposta pra praticamente qualquer coisa no SQL Server é: It’s depends.

Espero ter sido claro e ter ajudado alguém. Se sim, Já valeu a postagem.

Obrigado pela visita and…

Keep Querying !

[]’s

Desafio #2 T-SQL – MERGE e OUTPUT

Merge

MERGE é uma cláusula sensacional que foi implementada no SQL Server 2008. Pouca gente usa, e eu imagino que seja pela complexidade de declaração se comparando com outros comandos DML (Como por exemplo, DELETE, UPDATE e INSERT).

Leia mais sobre o comando aqui

Devo lembrar que a prova 70-461 vai cobrar esse conhecimento e provavelmente em mais de uma questão (assim como aconteceu na 70-433) e é bastante interessante que o conhecimento da mesma seja algo natural e intuitivo, além de ser um ótimo modo de se pensar/programar DML. Qual a forma que encontrei falar sobre a cláusula? Bem, claro, com um desafio! Vamos ao Desafio T-SQL #2 – MERGE e OUTPUT

Case

A empresa Trupe123 resolve, depois de anos sem dar aumento para seus funcionários, tomar uma atitude. Muito foi discutido sobre plano de crescimento, meritocracia, etc e depois de muita discussão, polêmica e briga. Como várias pessoas também saíram da empresa em um curto período de tempo, o RH aproveitou o momento para realizar mudanças no quadro de funcionários (acrescentando e/ou retirando profissionais) ou alterando cargos.O responsável pelo RH, chamado Pedro Bial entregou a você, o DBA, uma lista de mudanças que devem ser refletidas na tabela de empregados.

Com o material necessário pronto para fazer o seu trabalho, algumas instruções lhe são impostas: O pedido do RH foi bastante claro: associar pelo nome que já existe no sistema.

1) Quem estiver com ativo = 0, foi desligado. Logo, deve-se apagar da tabela de Empregados quem foi desligado.

2) O Profissional que estiver na lista de Mudanças do RH mas não estiver na tabela de Empregados deve ser incluído.

3) Pode ter havido alguma alteração de cargo para quem não foi desligado. O valor que deve permanecer é o que vem da lista de Mudanças do RH, desde que o funcionário exista tanto na tabela como na Lista do RH.

4) O profissional que estiver na tabela de Empregados mas não estiver na Lista de Mudanças deve ser mantido como está.

Agora, como dizia Bane: LET THE GAMES BEGIN! O desafio, composto de duas etapas:

1) Construa uma instrução MERGE que esteja dentro do pedido do Pedro Bial, do RH;

2) Construa uma tabela de auditoria temporária que irá receber:

a) O nome do funcionário envolvido na atualização;

b) O nome do evento (INCLUSÃO, EXCLUSÃO OU ATUALIZAÇÃO) seguido do valor antigo e do valor novo, se necessário;

c) Um campo de DATA que informe DATA E HORÁRIO de quando o registro foi incluído na tabela de auditoria; PS: Para o desafio de no.2, sinta-se a vontade para recriar toda a estrutura e adapte a sua estrutura MERGE utilizando a cláusula OUTPUT.

Outra coisa: como você provavelmente vai testar bastante tais comandos, vale a pena abrir algumas transações e ver o resultado por lá mesmo. É isso. Na próxima postagem volto com o resultado. Provavelmente final de semana. Novamente, obrigado pela sua visita e sinta-se a vontade.

SQL Server 2012 – Cláusula CONCAT() e o que isso significa pra galáxia

golphin

Bom dia. Post rápido, de nível básico pra não deixar água parada 🙂

Vários Sistemas Gerenciadores de Bancos de Dados (ou DBMS, no original) utilizam, pra concatenar, ou seja, juntar textos, pipes (o símbolo  –> | <–)  sendo que o padrão ANSI-92 prevê dois pipes como concatenação (mas não é obrigado a ser seguido tanto que o SQL Server não o faz) ou a função CONCAT(), que é bastante popular no Oracle e no MySQL. SQL Server, por sua vez, sempre concatenou os textos com o símbolo + (plus, conhecimento popularmente como MAIS).

Felizmente, assim como de costume em cada release, novos comandos (ou velhos, dependendo do ponto de vista) são adicionados no SQL Server de modo a facilitar a portabilidade entre sistemas. Aliás, features assim eu já vejo de cara como tentativa da MS de justificar migrações de código, deixando-as menos penosas. Mas bem, adivinha quem entrou como alternativa pra concatenações no SQL Server?

THIS GUY  ————> link

Mas essa ainda não é a maior vantagem do CONCAT sobre o método tradicional. Observe que todos os envolvidos na concatenação eram tipos textuais. Mas e nos casos comuns, onde geralmente temos que concatenar texto com números?

Msg 245, Level 16, State 1, Line 11
Conversion failed when converting the varchar value ‘SQL SERVER ‘ to data type int.

A mensagem é clara demais…Ele tenta concatenar um número com texto e falha. Pra que o código acima rodasse tranquilamente, era necessário um CAST ou CONVERT na variável @release para um tipo textual, sendo possível assim realizar a concatenação. Exemplo:

Significa que quando recebermos a tarefa de migrar um script do MySQL ou Oracle pra SQL Server por exemplo, teremos menos uma dor de cabeça em relação a cláusula de concatenação, já que a função agora é a mesma. Parece uma mudança irrelevante e sem graça, e de fato, perto do que o 2012 traz, não é aquela senhora feature, mas achei um passo até notável. Alguns pontos:

1) Evite sempre que possível o uso de extensões proprietárias. Prefira sempre comandos ANSI e se não houver, algo de sintaxe similar ou que seja comum a outros bancos. Isso facilita o reuso, migrações de código entre plataformas. SEMPRE pense nisso quando for desenvolver algo em SQL.

2) Concatenação geralmente é um recurso bastante presente em códigos legados. Não precisar portar boa (senão toda) parte dele é economia de tempo. Isso tem impacto sobre sua vida, sua produtividade e na vida dos ursos no polo norte.

3) SQL Server cada vez mais se torna amigável adaptando em si alguns recursos que são usados de modo frequente. Vejo isso como uma oportunidade  de desmistificar pra profissionais que mexem com outros sistemas que MSSQL é algo de outro mundo (sendo que nem é e possui inclusive um dos dialetos (T-SQL) mais fáceis entre os disponíveis). O uso destes recursos pelo desenvolvedor possibilita a propagação dessa idéia. ;

4) Desenvolvedores (T)-SQL fazem com que o código mais universal  reduzam o impacto de meteoritos para longe da órbita do planeta Migrations;

Enfim, recomendo que você use CONCAT() sempre que possível partindo da versão SQL Server 2012 se não houver envolvimento com o legado, é claro.

[]’s

Vamos estudar SQL Server 2012?

birds

Boa noite Pessoal! Post rápido e preguiço devido às correrias da vida.

Estou bastante contente (e empolgado, não tem como esconder) sobre SQL Server atualmente. Comecei a estudar em conjunto pra prova de certificação (exame 70-461) e isso tem gerado resultados mais eficientes em comparação ao estudo individual. Até então, meu contato com SQL Server 2012 se restringia apenas a leitura, uma logada+fuçada  em uma coisa ou outra, mas agora vai (!) , e vou refletir isso em postagens aqui no blog, reforçando aqui meu compromisso de usar o wordpress de verdade 🙂

Resolvi, além disso, deixar o convite para quem tá afim de dar uma mexida também:

  • Baixe o SQL Server 2012 Evaluation (Ou trial/teste, como preferir) aqui
  • Algumas novidades no T-SQL do 2012 bem explicadas aqui
  • O conteúdo da prova de Querying (primeira prova) mencionada no post aqui
  • Caso tenha dúvida e precise de uma mão, depois de dar aquela garimpada de leve na documentação oficial (Books Online/MSDN) e internet, a comunidade SQL Server está presente em peso nos fóruns.
  • Tem material no MVA também neste link:

Outros fóruns e blogs relacionados ao conteúdo estão aí disponíveis também. Não vou postar por pura preguiça, e acho que leitura de blog deve ser on-demand de acordo com o internauts.

Eu sei que é um tanto engraçado em meados de 2013 eu dizer, no título, pra estudar a versão 2012 sendo que a 2014 já está aí, kkkkkkkk. Mas bem, levando em conta que eu estava estudando/trabalhando/lendo sobre o 2008 R2, só deu pra dizer isso agora.

Por enquanto é isso. Até!