Pular para o conteúdo principal

Postagens

Mostrando postagens de 2014

Como calcular dias úteis com o SQL Server

No post anterior foi demonstrado como fazer o cálculo dos dias úteis entre duas datas usando a linguagem C#.Este cálculo pode ser muito útil principalmente para rotinas comerciais e relatórios. Para não deixar limitado à linguagem C# este post demonstra como fazer o cálculo usando o banco de dados Microsoft SQL Server (MSSQL). No exemplo a solução apresentada lança mão das funções de usuário do MSSQL. No código será demonstrado como criar uma destas funções e seus principais aspectos. A demonstração usa o banco de dados AdventureWorks.As funções de usuário do SQL ServerO MSSQL possui um número muito grande de funções nativas (built in functions) que resolve vários problemas. Para saber quais estão disponíveis basta verificar na ferramenta SQL Server Management Studio (SSMS) o item Programmability > Functions na janela Object Explorer conforme demonstrada na figura abaixo. Existem as funções específicas de cada banco e as que são nativas do MSSQL. Mesmo assim pode surgir a necessida…

Obtendo número de dias úteis entre duas datas com C#

Após algum tempo sem postar artigos sobre C# finalmente achei algo interessante e relativamente simples de fazer sem cair na repetição de artigos já bem documentados. Desta vez veremos como criar um método para calcular o número de dias corridos – considerando os dias entre segunda e sexta-feira e sem contar os feriados – entre duas datas usando a linguagem C#.Para tornar o post um pouco mais interessante isto será feito sem usar o Visual Studio ou qualquer ferramenta de edição integrada de código e compilação, ou seja, vamos usar um editor de texto para o código e o prompt de comandos para compilar o projeto.A justificativa para esta abordagem é demonstrar como gerar pequenos programas para resolver problemas pontuais quando não há uma versão do Visual Studio disponível. Isto pode ajudar quando se estiver trabalhando em um servidor ou em máquinas de produção onde normalmente somente o Framework .Net está instalado.O problema a ser resolvidoO cálculo de número de dias úteis entre duas…

Funções analíticas no SQL Server–Parte 2–LEAD (Plus: CTE)

Aplicação prática para funções analíticas e Common Table Expressions (CTE)Dando seguimento na proposta de mostrar as funções analíticas no MSSQL neste post será apresentada uma aplicação prática para a função LEAD.É recomendável verificar a primeira parte – função LAG – deste blog para poder ambientar-se no assunto.Como assunto adicional será apresentado o recurso Common Table Expressions (CTE) durante a elaboração da aplicação prática.A função LEAD age de forma oposta a LAG, ou seja, enquanto esta última traz resultados de um subconjunto anterior a um critério que seja passado, LEAD mostra a soma (ou média, ou agrupamento desejado) para um subconjunto posterior ao da linha atual.Considere a necessidade de se mostrar em uma consulta a soma das vendas por ano onde se deseje exibir o resultado de um ano e do ano posterior, para, por exemplo, se calcular a evolução percentual destas, LEAD vai possibilitar criar esta consulta sem a necessidade de usar sub consultas.A sintaxe de sua utiliz…

Funções analíticas no SQL Server–Parte 1-LAG

Funções analíticas são muito usadas em aplicações de B.I. e oferecem ótimos atalhos para realizar consultas complexas simplificando em muito as instruções SQL que são escritas e também diminuindo a utilização de subconsultas.Em recente aula tive contato com as funções analíticas usadas no ORACLE e fiquei impressionado e ao mesmo tempo curioso para saber como seriam as funções equivalentes no SQL Server, já que é o banco com o qual eu mais trabalho.Para a minha satisfação existe funções equivalentes no SQL Server ainda que com algumas diferenças.Se você quiser conhecer um pouco mais sobre o assunto sugiro os seguintes links:Funções analíticas – Descrevendo o seu funcionamento no SQL Server e com links para as principais. Função LAG – Descreve o funcionamento da função LAG que é demonstrada neste post.O propósito da função LAGA função LAG facilita a tarefa de colocar na linha atual de um resultado de uma consulta o valor de uma consulta correspondente à linha imediatamente anterior. Pa…

Desabilitando o auto commit no SSMS (SQL Server Management Studio)

(Ou, como prevenir desastres e manter o emprego a salvo…)Neste post vai uma pequena mas tremendamente útil dica para desabilitar o auto commit da aplicação SQL Server Management Studio (SSMS) que é usada por dez entre dez usuários do banco de dados SQL Server para fazer consultas, alterações e executar scripts no banco de dados. (Preferências à parte, realmente muita gente usa),A primeira e mais importante notícia é que, diferentemente da ferramenta do Oracle, este editor de scripts do SQL Server vem com o recurso de auto commit ativado por padrão, assim, qualquer instrução DML (alteração dos dados com update, insert e delete) ou DDL (alteração no banco como create, drop, alter, etc.) será imediatamente enviada ao banco e persistida.Isto pode ser altamente crítico pois se estiver executando as instruções em um banco de dados de produção não haverá muitas formas de desfazer se é que haverá.Inicialmente, pode se evitar muitos acidades executando estas instruções dentro de um bloco BEGIN…

Pivot dinâmico com SQL Server

Passo a passo para usar pivoteamento dinâmicoOs bancos de dados bem configurados e definidos armazenam os dados de forma a otimizar o acesso, evitando duplicidade e garantindo a integridade. Porém, em muitas situações isto pode dificultar a apresentação de forma adequada sendo necessário preparar os dados usando vários recursos entre os quais, fazer o pivoteamento.Se você não precisou ainda usar ou não sabe o que é consiste em transformar cada linha de uma determinada coluna em colunas de uma nova consulta.Assim, considere uma tabela que armazene as notas bimestrais de um boletim. Uma possível estrutura para esta tabela seria algo assim:ColunaTipo de dado/TamanhoDisciplinanvarchar(50)BimestreIntNotanumeric(5,2)Uma consulta select nesta tabela com alguns dados traria um resultado parecido com o abaixo:Porém pode ser que para apresentar estes dados em um relatório seja necessário transformar cada bimestre em uma coluna e agrupar as notas nestas colunas para que fique dessa forma:Isto po…