Post Destacado

@06 – O que Acontece?


Olá, bom dia. 

Tudo bem? Espero que você que acompanha o meu blog ou esta acessando pela primeira vez possa estar bem. Para começar o outono, nada melhor que um simples post relacionado ao Microsoft SQL Server, não é mesmo?

Eu sou suspeito a dizer.

Seja bem-vindo ao @06 – O que Acontece? 

Seguindo a tradição, antes de apresentar o quinto post, quero destacar alguns pontos sobre esta sessão, em especial o tipo de conteúdo que você leitor vai encontrar em cada post relacionado a ela:

1 – Os posts publicados nesta sessão envolvem um pouco do Micrososft SQL Server, na verdade o objetivo dela é tentar mostrar como ele SQL Server, o qual aqui eu vou denominar como caixa, pensa exclusivamente fora dela, ou seja, como este grandioso SGBD (Sistema Gerenciador de Banco de Dados) faz para que tenhamos nossos dados armazenados e apresentados em tela, em adicional como podemos de uma forma simples aprender, conhecer, desvendar os comportamentos realizados por ele além do uso das habituais ferramentas de administração: SQL Server Management Studio ou Azure Data Studio.

2 – Os posts, não apresentam o objetivo de demonstrar recursos, comandos, funcionalidades ou ensinar algo novo, na verdade eu quero tentar mostrar o que acontece muitas vezes quando por exemplo você esta processando um simples comando Select buscando milhões de dados em uma tabela, e o SQL Server Management Studio vai apresentando aos poucos os registros. Serão exclusivamente estes cenários, comportamentos e formas de atuação envolvendo o SQL Server e o ambiente que ele se encontra;

3 – Os posts, não terão uma estrutura padrão, na verdade, O que Acontece, foi idealizado da mesma forma que inicialmente começamos a pensar. Vamos reunindo conhecimentos, ideias, possibilidades, hipóteses, analisando alternativas, mensurando teorias, até tentar construir algo mais concreto;

4 – Não será estabelecido um calendário de publicação, ao contrário, sempre que algum pensamento fora da caixa pairar sobre a minha cabeça, ou coisas do meu dia-a-dia relacionados as minhas experiências profissionais ou acadêmicas, novos posts serão publicados, bem como, os atuais atualizados e corrigidos;

5 – Não vou me ater ao certo ou errado, melhor ou pior, tecnicamente perfeito ou melhor tecnicamente, o que eu quero é tentar como eu já destaquei ilustrar o que acontece do lado de fora do SQL Server, o que ele muitas vezes esta realizando e não temos ideia do que está acontecendo; e

6 – Vou tentar em cada post trazer uma ferramenta, aplicativo ou utilitário existente no próprio sistema operacional que possa nos ajudar a observar e entender o que está acontecendo de preferência em tempo real, em adicional, se possível utilizarei vídeos para elucidar de forma mais didática o objetivo do post.

Continuar lendo
Post Destacado

Short Scripts – Fevereiro 2024


Olá pessoal, boa tarde…

Tudo bem? Sexta-feira véspera de carnaval, o Brasil pulsando por estes dias de folia, alegria e muita agitação. Não se esquecendo que devemos ter responsabilidade.


Seja bem-vindo, em mais um post da sessão Short Scripts, o primeiro post desta sessão em 2024, como também, o número 49 em seu total.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de outubro de 2023, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

Continuar lendo
Post Destacado

Modelagem de Dados aplicada em ambiente de Data Warehouse – Técnicas utilizadas na Modelagem Dimensional ou Multidimensional


Olá, boa noite!

Seja bem-vindo a mais um post da sessão “Contando História com Dados“.

Nesta sessão, você encontrará posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Short Scripts – Outubro 2023


Olá pessoal, boa tarde…

Tudo bem? Estamos em pleno outono mas com cara de verão e inverno ao mesmo tempo, infelizmente a natureza esta dando diversos sinais que ela está sentindo muito todos os impactos gerados pela humanidade nos últimos anos.

Seja bem-vindo, em mais um post da sessão Short Scripts, o segundo post desta sessão em 2023 e o de número 48 em seu total.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de fevereiro de 2023, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

Continuar lendo
Post Destacado

Material de Apoio – Setembro 2023


Olá, boa tarde!

Seja bem-vindo a mais um post da sessão Material de Apoio, uma das mais antigas sessões compartilhadas aqui no meu blog.

Introdução

A cada novo post, você vai encontrar uma imagem que representa não exatamente o conteúdo do post, mas sim a época, período ou estação do ano em que o mesmo foi publicado.

Uma forma diferente e até mesmo divertida que encontrei para tentar te ajudar a se lembrar do que você acessou em mais esta visita.

Essa não é uma sugestão minha, alguns visitantes em seus comentários, destacavam um pouco de dificuldade em encontrar determinado do conteúdo ou post, como também, não conseguiam se lembrar o que havia sido acessado.

Desta maneira, tomei a decisão de adicionar uma imagem, figura ou símbolo que traga uma certa lembrança como forma de ajudar o visitante ou seguidor do meu blog a encontrar o conteúdo desejado.

Continuar lendo
Post Destacado

É Pá e Bola com o SQL Server – ⑨


Olá, boa tarde.

Este é mais um post da nova Sessão É Pá e Bola com SQL Server.

Aqui o papo é simples e direto, sem formalidade, com dicas rápidas para se fazer algo relacionado com Microsoft SQL Server de forma geral.

Você pode estar se perguntando o porque deste nome, eu já te respondo.

O porquê é que todas as dicas a serem compartilhadas podem estar envolvidas com esportes praticados com bola, ou simplesmente por sua facilidade na construção e execução.

Continuar lendo
Post Destacado

Modelagem de Dados aplicada em ambiente de Data Warehouse – Dimensões Descaracterizadas e Modelo Snowflake


Olá, boa noite!

Seja bem-vindo a mais um post da sessão “Contando História com Dados“.

Nesta sessão, você encontrará posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Material de Apoio – Maio 2023


Salve galera, boa noite!

Seja bem-vindo a mais um post da sessão Material de Apoio, uma das sessões de maiores destaques e acessos do meu blog nos últimos meses.

Introdução

A cada novo post, você vai encontrar uma imagem que representa não exatamente o conteúdo do post, mas sim a época, período ou estação do ano em que o mesmo foi publicado.

Uma forma diferente e até mesmo divertida que encontrei para tentar te ajudar a se lembrar do que você acessou em mais esta visita.

Essa não é uma sugestão minha, alguns visitantes em seus comentários, destacavam um pouco de dificuldade em encontrar determinado do conteúdo ou post, como também, não conseguiam se lembrar o que havia sido acessado.

Desta maneira, tomei a decisão de adicionar uma imagem, figura ou símbolo que traga uma certa lembrança como forma de ajudar o visitante ou seguidor do meu blog a encontrar o conteúdo desejado.

O post de hoje esta sendo representado através da Figura 1 a seguir, a qual se relaciona com a atual estação do ano que tradicionalmente faz parte do início do ano, o Outono.

Figura 1 – Símbolo que representa conteúdo compartilhado no post 176.


O post de hoje

Representa o segundo post desta sessão no ano de 2023 e de número 176 no total da mesma.

Para aqueles que já acompanham o meu blog a um certo tempo, os posts dedicados a sessão Material de Apoio, possuem o objetivo de compartilhar o conhecimento de recursos, funcionalidades e procedimentos que podemos realizar no Microsoft SQL Server.

Todos os arquivos compartilhados neste post, que atualmente estão compondo a minha galeria de códigos formada ao longo dos anos de trabalho como DBA e atualmente como Professor de Banco de Dados, foram concebidos com base nas atividades realizadas mediantes aos meus estudos e consultorias aplicadas ao Microsoft SQL Server em seus mais diversos recursos e funcionalidades.

Destaco que os arquivos a seguir, não necessariamente representam a melhor solução, na verdade os respectivos códigos e scripts satisfazem um possível entendimento da minha parte de acordo com o cenário ao qual o mesmo foi analisado e implementado.

Neste post você vai encontrar arquivos relacionados com os seguintes temas:

  • Comando Alter Database;
  • Comando Create Clustered Index;
  • Comando Create Database;
  • Comando Create NonClustered Index;
  • Comando Create Table;
  • Comando DBCC CheckDB();
  • Comando DBCC Page();
  • Comando DBCC TraceOn();
  • Comando Declare;
  • Comando Drop Index;
  • Comando Drop Table;
  • Comando Group By;
  • Comando Insert;
  • Comando Update;
  • Diretiva Set Page_Verify CheckSum;
  • Diretiva Set Page_Verify None;
  • Função Convert();
  • Função de Agregação Count();
  • Função de Sistema Object_ID();
  • Função de Sistema Object_Name();
  • Junção Inner Join;
  • Tipo de Dados Int;
  • Tipo de Dados Varbinary;
  • Tipo de Dados Varchar();
  • Visão de Gerenciamento Dinâmico Sys.dm_os_buffer_descriptors;
  • Visão de Gerenciamento Dinâmico Sys.system_internals_allocation_units;
  • Visão de Gerenciamento Dinâmico Sys.system_internals_partitions;
  • Visão de Sistema Sys.Allocations_Units;
  • Visão de Sistema Sys.Indexes; e
  • Visão de Sistema Sys.Partitions.

Espero que este conteúdo possa lhe ajudar em seus atividades profissionais e acadêmicas. Por questões de compatibilidade com a plataforma WordPress.com, todos os arquivos estão renomeados com a extensão .docx ao final do seu respectivo nome, sendo assim, após o download torna-se necessário remover esta extensão, mantendo somente a extensão padrão .sql ou abrir em algum editor de texto similar ao Notepad.

Material de Apoio

Fique a vontade para copiar, editar, compartilhar e distribuir estes arquivos com seus contatos, aproveite se possível deixe seu comentário, críticas, sugestões e observações.

Nota: Todos os arquivos disponibilizados foram obtidos ou criados com autorização de seus autores, sendo estes, passíveis de direitos autorais.

Caso você queira acessar os posts anteriores da sessão, não perca tempo utilize os links listados abaixo:

Feedback

Espero que você goste do conteúdo aqui disponibilizado, como também, possa me ajudar a torná-lo ainda melhor no decorrer do tempo com a sua participação, preenchendo o formulário abaixo:

Agradecimento

Quero agradecer imensamente a sua visita, sinto-me honrado e orgulhoso de contar com a sua presença.

Não deixe de acessar os outros posts das demais sessões, o próximo post desta sessão será publicado brevemente.

Neste momento o melhor a fazer é se manter saudável mentalmente, fisicamente e emocionalmente.

Até mais.

Post Destacado

Modelagem de Dados aplicada em ambiente de Data Warehouse – Hierarquias, Drill-Down e Roll-UP


Olá, boa noite!

Seja bem-vindo a mais um post da sessão “Contando História com Dados“.

Nesta nova sessão, você vai encontrar posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Short Scripts – Fevereiro 2023


Olá pessoal, boa tarde…

Após um domingo de fortes chuvas aqui na região de São Roque, hoje segunda-feira uma linda tarde, com temperatura agradável e um lindo céu azul.

Seja bem-vindo, em mais um post da sessão Short Scripts, o primeiro post desta sessão em 2023 e o de número 47 em seu total.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de setembro de 2022, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

Continuar lendo
Post Destacado

Teoria dos Conjuntos Fuzzy


Olá, boa tarde!

Seja bem-vindo a mais um post da sessão “Contando História com Dados“.

Nesta nova sessão, você vai encontrar posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Validação Cruzada aplicada a modelos matemáticos


Olá, boa dia!

Seja bem-vindo a mais um post da sessão “Contando História com Dados“.

Nesta nova sessão, você vai encontrar posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Modelagem de Dados aplicada em ambiente de Data Warehouse


Olá, boa noite!

Seja bem-vindo a mais um post da sessão “Contando História com Dados“.

Nesta nova sessão, você vai encontrar posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Como podemos contar história com dados


Olá, bom dia!

Hoje domingo dia 09/10, estou iniciando o primeiro post da nova sessão do meu blog intitulada: “Contando História com Dados“.

Nesta nova sessão, você vai encontrar posts relacionados a área de dados, destacando ao longo dos anos como este elemento atualmente reconhecimento como o mais importante em nossas vidas, conseguiu evoluir, conquistar o seu espaço, tornando-se cada vez mais vital para nossa evolução.

Em adicional, estarei compartilhando sempre que possível, um documento, apresentação ou resumo do conteúdo aqui compartilhado, o qual conterá o meu ponto de vista, conhecimento e aprendizados obtidos ao longo dos estudos realizados para elaboração do referido post.

Continuar lendo
Post Destacado

Short Scripts – Setembro 2022


Olá pessoal, boa tarde…

Um lindo domingo com muito sol, temperatura agradavél e uma leve brisa, aqui em São Roque interior de São Paulo.

Seja bem-vindo, em mais um post da sessão Short Scripts, o segundo post desta sessão em 2022 e o de número 46 em seu total.

Estamos na última semana do inverno neste ano de 2022, sou suspeito a dizer, adoro estas temperaturas mais baixas, este vento bem gelado, gosto muito do inverno.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de março de 2022, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

Continuar lendo
Post Destacado

@05 – O que Acontece?


Olá, bom dia. 

Tudo bem? Espero que você que acompanha o meu blog ou esta acessando pela primeira vez possa estar bem.

Estamos iniciando o mês de agosto, o ano já esta entrando em sua reta final. 

Para começar o oitavo mês de 2022, nada melhor que um simples post relacionado ao Microsoft SQL Server, não é mesmo?

Eu sou suspeito a dizer.

Seja bem-vindo ao @05 – O que Acontece? 

Seguindo a tradição, antes de apresentar o quinto post, quero destacar alguns pontos sobre esta sessão, em especial o tipo de conteúdo que você leitor vai encontrar em cada post relacionado a ela:

1 – Os posts publicados nesta sessão envolvem um pouco do Micrososft SQL Server, na verdade o objetivo dela é tentar mostrar como ele SQL Server, o qual aqui eu vou denominar como caixa, pensa exclusivamente fora dela, ou seja, como este grandioso SGBD (Sistema Gerenciador de Banco de Dados) faz para que tenhamos nossos dados armazenados e apresentados em tela, em adicional como podemos de uma forma simples aprender, conhecer, desvendar os comportamentos realizados por ele além do uso das habituais ferramentas de administração: SQL Server Management Studio ou Azure Data Studio.

2 – Os posts, não apresentam o objetivo de demonstrar recursos, comandos, funcionalidades ou ensinar algo novo, na verdade eu quero tentar mostrar o que acontece muitas vezes quando por exemplo você esta processando um simples comando Select buscando milhões de dados em uma tabela, e o SQL Server Management Studio vai apresentando aos poucos os registros. Serão exclusivamente estes cenários, comportamentos e formas de atuação envolvendo o SQL Server e o ambiente que ele se encontra;

3 – Os posts, não terão uma estrutura padrão, na verdade, O que Acontece, foi idealizado da mesma forma que inicialmente começamos a pensar. Vamos reunindo conhecimentos, ideias, possibilidades, hipóteses, analisando alternativas, mensurando teorias, até tentar construir algo mais concreto;

4 – Não será estabelecido um calendário de publicação, ao contrário, sempre que algum pensamento fora da caixa pairar sobre a minha cabeça, ou coisas do meu dia-a-dia relacionados as minhas experiências profissionais ou acadêmicas, novos posts serão publicados, bem como, os atuais atualizados e corrigidos;

5 – Não vou me ater ao certo ou errado, melhor ou pior, tecnicamente perfeito ou melhor tecnicamente, o que eu quero é tentar como eu já destaquei ilustrar o que acontece do lado de fora do SQL Server, o que ele muitas vezes esta realizando e não temos ideia do que está acontecendo; e

6 – Vou tentar em cada post trazer uma ferramenta, aplicativo ou utilitário existente no próprio sistema operacional que possa nos ajudar a observar e entender o que está acontecendo de preferência em tempo real, em adicional, se possível utilizarei vídeos para elucidar de forma mais didática o objetivo do post.

Continuar lendo
Post Destacado

SQL Server 2022 Preview CTP 2.1 liberada


Desde o lançamento da versão CTP 2.0 apresentada no mês de maio, diversos posts sobre futuros recursos e funcionalidades vem sendo compartilhado.

Ontem a Microsoft disponibilizou uma nova versão CTP do SQL Server 2022, a qual esta denominada como CTP 2.1, que destaca o seguinte conjunto de novidades a serem possivelmente adicionada a futura versão final do Microsoft SQL Server 2022 a ser lançado.

Dentre a lista de novidades adicionadas no CTP 2.1, destaco:

Analytics

  1. O SQL Server 2022 (16.x) suporta criar tabela externa AS SELECT, que permite que o SQL Server crie uma tabela externa e, em paralelo, exporte dados para um local diferente.
  2. Suporte de formato de tabela Delta para Polybase. Permitindo que o SQL Server aproveite o formato de tabela delta para o OPENROWSET, CREATE EXTERNAL TABLE and CREATE EXTERNAL TABLE AS SELECT.
  3. Integração de armazenamento de objetos (Data Lake Virtualization) – local atualizado para certificado de armazenamento de objeto compatível com S3 para SQL Server no Linux.

Performance

  1. Query store habilitado por padrão para novos bancos de dados.
  2. Otimização de plano sensível ao parâmetro aplicado de acordo com a capacidade de suporte.
  3. Feedback de acordo com Grau de Paralelismo – (Degree of Parallelism – DOP).

Management

  1. Administração do Azure Arc através do SQL Server Configuration Manager.
  2. Attach diretamene aplicado ao Azure a partir da configuração através do uso da extensão Arc para o SQL Server definido com uma opção adicional.
  3. Backups instantâneos.

Security

  1. Processo de automação para configurar o administrador Azure AD para SQL Server.
  2. Ledger – upload automático para armazenamento azure.
  3. Três funções adicionais de nível de servidor fixo adicionadas.

Language Transact-SQL – Novas funções adicionadas:

SQL Server 2022: Habilitado para aZure com desempenho contínuo e inovação de segurança do edge à cloud.

Figura 1 – Arquitetura do Microsoft SQL Server 2022.

Figura 2 – Pilares do Microsoft SQL Server 2022.

Quer saber mais sobre a nova versão do SQL Server? Assista o vídeo:

Faça agora mesmo o download acessando: https://info.microsoft.com/ww-landing-sql-server-2022.html


Fontes e Direitos Autorais:
https://www.mssqltips.com/sqlservertip/7265/sql-server-2022-t-sql-enhancements/#comments

https://cloudblogs.microsoft.com/sqlserver/2022/05/24/announcing-sql-server-2022-public-preview-azure-enabled-with-continued-performance-and-security-innovation/

https://www.microsoft.com/pt-br/sql-server/sql-server-2022

Post Destacado

Material de Apoio – Junho 2022


Olá, bom dia!

Seja bem-vindo a mais um post da sessão Material de Apoio referente ao mês de Junho de 2022.

Espero que esteja tudo bem, já faz alguns meses que não nos encontramos! Chegamos na metade de 2022, mais uma ano com muitas turbulências, vamos em frente, tentando fazer o melhor possível.

Introdução

Como já destacado em todos os posts desta sessão, a cada novo post, você vai encontrar uma imagem que representa não exatamente o conteúdo do post, mas sim a época, período ou estação do ano em que o mesmo foi publicado.
Uma forma diferente e até mesmo divertida que encontrei para tentar te ajudar a se lembrar do que você acessou em mais esta visita.

Essa não é uma sugestão minha, tenho sempre recebido e-mails de visitantes que estavam gostando do conteúdo do post, mas as vezes não conseguiam se lembrar o que havia sido acessado, foi aí que pensei em adicionar uma imagem, figura ou símbolo que traga uma certa lembrança mais rápido e fácil ao visitante.

O post de hoje esta sendo representado através da Figura 1 a seguir, a qual se relaciona com a atual estação do ano o Outono, mas que em algumas regiões do pais esta mais com cara de inverno.

Figura 1 – Símbolo que representa conteúdo compartilhado no post 174.


O post de hoje

Representa o segundo post desta sessão no ano de 2022 e de número 174 no total da mesma.

Para aqueles que já acompanham o meu blog a um certo tempo, os posts dedicados a sessão Material de Apoio, possuem o objetivo de compartilhar o conhecimento de recursos, funcionalidades e procedimentos que podemos realizar no Microsoft SQL Server.

Todos os arquivos compartilhados neste post, que atualmente estão compondo a minha galeria de códigos formada ao longo dos anos de trabalho como DBA e atualmente como Professor de Banco de Dados, foram concebidos com base nas atividades realizadas mediantes aos meus estudos e consultorias aplicadas ao Microsoft SQL Server em seus mais diversos recursos e funcionalidades.

Destaco que os arquivos a seguir, não necessariamente representam a melhor solução, na verdade os respectivos códigos e scripts satisfazem um possível entendimento da minha parte de acordo com o cenário ao qual o mesmo foi analisado e implementado.

Neste post você vai encontrar arquivos relacionados com os seguintes temas:

• Buffer Cache;
• Comando Create NonClustered Index;
• Comando Create Table;
• Comando DBCC CheckDB();
• Comando DBCC Page();
• Comando DBCC TraceOn();
• Comando Declare;
• Comando Drop Table;
• Comando Insert;
• Compressão de dados;
• Corrompendo páginas de dados;
• DMV sys.dm_os_buffer_descriptors;
• DMV sys.system_internals_allocation_units;
• DMV sys.system_internals_partitions;
• Fragmentação de Dados;
• Fragmentação de Páginas de Dados;
• Função Convert();
• Função Object_ID();
• Função Object_Name();
• Índices Clustered;
• Índices NonClustered;
• Memory Dump;
• Opção FillFactor;
• Páginas de Dados;
• System Stored Procedure sp_estimate_data_compression_savings;
• Visão Sys.Indexes; e
• Visão Sys.partitions.

Espero que este conteúdo possa lhe ajudar em seus atividades profissionais e acadêmicas. Por questões de compatibilidade com a plataforma WordPress.com, todos os arquivos estão renomeados com a extensão .docx ao final do seu respectivo nome, sendo assim, após o download torna-se necessário remover esta extensão, mantendo somente a extensão padrão .sql ou abrir em algum editor de texto similar ao Notepad.

Material de Apoio

Fique a vontade para copiar, editar, compartilhar e distribuir estes arquivos com seus contatos, aproveite se possível deixe seu comentário, críticas, sugestões e observações.

Nota: Todos os arquivos disponibilizados foram obtidos ou criados com autorização de seus autores, sendo estes, passíveis de direitos autorais.

Caso você queira acessar os posts anteriores da sessão, não perca tempo utilize os links listados abaixo:

https://pedrogalvaojunior.wordpress.com/2022/02/22/material-de-apoio-fevereiro-2022/

https://pedrogalvaojunior.wordpress.com/2021/08/17/material-de-apoio-agosto-2021/

https://pedrogalvaojunior.wordpress.com/2021/04/20/material-de-apoio-abril-2021/

https://pedrogalvaojunior.wordpress.com/2021/01/18/material-de-apoio-janeiro-2021/

https://pedrogalvaojunior.wordpress.com/2020/10/16/material-de-apoio-outubro2020/

Feedback

Espero que você goste do conteúdo aqui disponibilizado, como também, possa me ajudar a torná-lo ainda melhor no decorrer do tempo com a sua participação, preenchendo o formulário abaixo:

Agradecimento

Quero agradecer imensamente a sua visita, sinto-me honrado e orgulhoso de contar com a sua presença.

Não deixe de acessar os outros posts das demais sessões, o próximo post desta sessão será publicado brevemente.

Neste momento o melhor a fazer é se manter saudável mentalmente, fisicamente e emocionalmente.

Até mais.

Post Destacado

É Pá e Bola com o SQL Server – ⑧


Olá, boa tarde….

Este é mais um post da nova Sessão É Pá e Bola com SQL Server.

Aqui o papo é simples e direto, sem formalidade, com dicas rápidas para se fazer algo relacionado com Microsoft SQL Server de forma geral.

Você pode estar se perguntando o porque deste nome, eu já te respondo.

O porquê é que todas as dicas a serem compartilhadas podem estar envolvidas com esportes praticados com bola, ou simplesmente por sua facilidade na construção e execução.

Continuar lendo
Post Destacado

Short Scripts – Março 2022


Olá pessoal, bom dia…

Seja bem-vindo, em mais um post da sessão Short Scripts, o primeiro post desta sessão em 2022 e o de número 45 em seu total.

Estamos começando o outono de 2022, eu adoro este vento que fica o dia todo em conjunto com esta temperatura agradável, chega de passar calor.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de julho de 2021, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

Continuar lendo
Post Destacado

Dica do Mês – Elaborando um rodízio de alunos para volta as aulas na pandemia através do Microsoft SQL Server 2019


Olá, muito bom dia, em especial a você amante de banco de dados relacional, principalmente ao Microsoft SQL Server.

Que bom lhe encontrar aqui em mais um post da sessão Dica do Mês, a qual está passando por algumas mudanças de layout e dinâmica no seu conteúdo para tentar neste momento em que estamos todos em casa oferecer algo mais simples, prático e direto as suas necessidades, tornando a leitura mais direta.

Você já deve ter notado em posts de outras sessões, algumas novidades, como o uso de imagens que se relacionam com o tema, a possibilidade de download do conteúdo do post em arquivo .PDF, o acréscimo da sessão links relacionados ao tema, enfim, alguns ajustes e melhorias que vão sendo realizados ao longo do tempo, de acordo com as sugestões, críticas e observações enviadas diariamente pelos mais de 1200 seguidores aqui presentes neste momento.

Para os posts da sessão Dica do Mês, você vai observar outras novidades, além do conteúdo compartilhado em arquivo .PDF, em adicional uma versão do código fonte compartilhada no formato .TXT, em paralelo a este conteúdo disponibilizado para que você possa trabalhar offline, os códigos fontes aqui presentes no post, serão publicados no formato de imagens (no post versão web, já o arquivo no formato .PDF terá todo o conteúdo do código fonte adicionado no formato original), contendo números de linhas de forma sequência, ao invés de postados de forma separada em blocos de código que as vezes se tornam ilegíveis ou de difícil compreensão, por fim, o uso das imagens é uma forma de lhe proporcionar uma navegação mais limpa, colorida e organizada.

Entretanto, o post continuará sendo dividido com pequenas subdivisões, mas com novas nomenclaturas, dentre elas destaco: Introdução, Materiais e Métodos, Resultados e Conclusões, etc… Enfatizo também o surgimento da subdivisão Código Fonte que vai contemplar a apresentar de todo código fonte em uma única área do post.

Outra mudança já implementada foi a remoção das costumeiras enquetes que antes eram sempre adicionadas ao post como uma forma de contar com a sua participação.

Então vamos em frente! Seja bem-vindo ao post – Elaborando um rodízio de alunos para volta as aulas na pandemia através do Microsoft SQL Server 2019.


Introdução

Estamos vivendo um momento em que toda população mundial está tendo que se adaptar devido as mudanças provocadas pelo já tão falado e temido COVID-19, eu mesmo venho em vários posts debatendo sobre este assunto.

O post de hoje surgiu da necessidade da minha esposa Fernanda Galvão, a qual neste momento está exercendo a função de Diretora Pedagógica na escola em que trabalha aqui na cidade de São Roque, interior do Estado de São Paulo. Dentre o conjunto de responsabilidades, a criação do Rodízio de Alunos é uma das atividades mais importantes para este momento.

De acordo com o conhecimento que ela possui, limitando-se as regras da Secretaria de Educação, Secretaria de Saúde e principalmente respeitando os protocolos criados para se combater e prevenir o Covid-19.

Começamos a criar diretamente no Microsoft Excel toda estrutura base, levando-se ao pé da letra, questões como o número de alunos que devem ir presencialmente a escola, em conjunto com os demais que estão em casa.

Olhando um para o outro, tivemos a real sensação que o buraco começou a ficar mais profundo, complexo e até mesmo cansativo para ser construído manualmente, devido a quantidade de alunos existentes na Escola, ainda mais a forma de se estabelecer a quantidade de dias presentes, foi então que ela com o seu jeitinho me falou: “Pe você não poderia me ajudar, será que não seria possível criar algo que já montasse o rodízio mensal e depois eu somente deixava ela bonitinho….”. E pra variar não tem como falar não!

Não é mesmo…. kkkkkkkkkk

Desta forma, pensei em porque não elaborar algum tipo de código, algoritmo ou até mesmo função que fosse possível definir os alunos e seus respectivos dias da semana, de acordo a regra:

  • Semanas 1, 3 e 5 – Dias da Semana: Segundas, Quartas e Sextas-Feiras;
  • Semanas 2 e 4 – Dias da Semana: Terças e Quintas-Feiras.

Em adicional, para se estabelecer de forma mensal um rodízio justo para todos, estabelecemos outra regra condicional:

  • Semanas 1, 3 e 5 – Alunos com números impares de acordo com a lista de presença; e
  • Semanas 2 e 4 – Alunos com números pares de acordo com a lista de presença.

De posse destas definições e outras considerações foi definida a elaboração do Rodízio, implementado basicamente como:

  1. Mensal, considerado somente os dias úteis da semana;
  2. O dia base da semana sendo sempre a segunda-feira, independente da data;
  3. Consideração o período de cinco semanas para todo mês; e
  4. A demarcação do dia em que o aluno vai para escola informado através da letra “X” e o dia em que se encontra em cada em branco.

 

No que se refere aos resultados e forma de apresentação, estarei abordando posteriormente.

             

Rodízio de Alunos

Pelo menos até o final do mês de fevereiro, as escolas da rede municipal de São Paulo vão continuar funcionando com apenas 35% da capacidade de alunos. Segundo o Estadão apurou, o poder municipal vai reavaliar esse porcentual apenas no início de março. Até lá, vale a regra dos 35%.

De acordo com decreto do governador João Doria (PSDB-SP), as escolas podem receber até 70% de alunos quando as cidades estiverem na fase amarela do plano de flexibilização da quarentena. A partir de segunda-feira, dia 8, a capital paulista ingressa exatamente nesta fase. Os municípios que discordam do avanço na flexibilização precisam publicar decretos informando uma eventual restrição. No dia 27 de janeiro, decreto municipal fixa em 35% a capacidade máxima de alunos.

Em nota ao Estadão, o poder municipal informa que “a cidade permite, neste momento, capacidade máxima de 35% até que as autoridades de saúde permitam a ampliação”. A intenção da prefeitura de São Paulo é “segurar” o porcentual de 35%, mesmo diante da pressão de representantes das instituições particulares.

A volta às aulas ocorre em meio à segunda onda da pandemia de covid-19 no Brasil. O Estado de São Paulo registra nesta sexta-feira, dia 5, o total de 54.324 óbitos e 1.833.163 casos confirmados durante toda a pandemia. Por isso, o posicionamento da Secretaria de Saúde será fundamental na decisão da prefeitura. “As diretrizes para abertura das escolas da rede municipal estão sendo pautadas por estudos realizados pelas autoridades de saúde, como os inquéritos sorológicos”, diz outro trecho da nota da prefeitura.

Rede estadual

As aulas presenciais nas escolas da rede estadual paulista começam nesta segunda-feira, em sistema de rodízio. Cada unidade poderá definir como vai realizar o rodízio e a presença dos estudantes será opcional. Mas o sindicato dos professores aprovou na sexta-feira uma greve contra o retorno. Segundo a Apeoesp, a decisão teve apoio de 81,8% dos professores.

O retorno foi adiado em uma semana. Segundo o secretário estadual da Educação, Rossieli Soares, o adiamento foi definido para facilitar o planejamento das escolas. Rossieli também retirou a obrigatoriedade de os alunos frequentarem as aulas na escola. O retorno passou a ser facultativo nas fases laranja e vermelha.

Vamos avançar mais um pouco em nosso post, conhecer os Materiais e Métodos vamos utilizar para construção do nosso cenário de testes e aplicação do Rodízio de Alunos.


 

Materiais e Métodos

Como de costume em todas as dicas do mês tenho sempre o cuidado em elaborar um cenário de uso simples e específico para demonstrar como podemos fazer uso de determinadas funcionalidades e características existentes no Microsoft SQL Server sem provocar qualquer tipo de impacto ao seu atual ambiente, este foi e sempre será o meu compromisso.

Destaco a seguir, todos os recursos e configurações necessárias para a construção e execução do post, com uma abordagem, simples e enxuta.

Materiais:

  • Instância ou        Servidor          SQL      Server instalado         Localmente, Virtualizado       ou  Cloud;
  • Utilização do SQL Server Management Studio ou Azure Data Studio;
  • Utilização do Microsoft Excel 2016 ou 2019;
  • Acesso ao banco de dados Master;
  • Permissão para criação de tabelas; e
  • Permissão para alteração do idioma do usuário em tempo de execução.

Métodos:

  • Criação do banco de dados Aulas;
  • Criação da Tabela Alunos;
  • Inserção de dez linhas de registros lógicos na tabela Alunos;
  • Atualização dos dados armazenados na coluna NomeAluno existente na Tabela Alunos;
  • Definição das CTEs:
    • CTECalendarioMensal;
    • CTEDiasDaSemana;
    • CTESemana1;
    • CTESemana2;
    • CTESemana3;
    • CTESemana4; e
    • CTESemana5.

Código Fonte

A seguir apresento todo código fonte elaborado diretamente no Microsoft SQL Server 2019 através do uso do SQL Server Management Studio 18.7.1 e testado também no Azure Data Studio release de Janeiro 2021:

Observação: Aqui estão os trechos de código fonte elaborados para este post, os quais como eu já destaquei também serão compartilhados em sua integra e formato original no arquivo em .PDF e .TXT.

Estamos caminhando para o término do nosso post, agora vamos conhecer os resultados obtidos após a execução do código fonte aqui compartilhado.

 

Resultados

Seguindo neste novo formato que estou adotando deste o post anterior, você vai poder observar os resultados obtidos após o processamento do código fonte compartilhado acima.

Para ilustrar e elucidar o que o Microsoft SQL Server nos apresentou de resultado, estarei fazendo uso do Microsoft Excel como recurso adicional de exportação do resultado gerado pelo Management Studio, conforme apresentam as Figuras 1 e 2 respectivamente abaixo:

Figura 1 – Rodízio de alunos elaborado e exportado para o Microsoft  Excel.

Figura 2 – Rodízio de alunos apresentado no Microsoft SQL Server Management Studio.

Importante: Gostaria de destacar que a  forma de apresentação dos dados, em adicional as nomenclaturas adotadas, estão respeitando as regras utilizadas pela Escola a qual minha esposa trabalha.

Como já abordado anteriormente, a escolha de quais os alunos devem inicialmente ir para Escola e quais devem ficar em casa, foram tratados como requisitos obrigatórios neste momento para elaboração desta primeira versão do rodízio, sabendo-se que a cada nova deliberação do Governo do Estado de São Paulo, teremos da necessidade de se adotar outras regras e definições para criação de um novo rodízio.

Para este momento foi aplicado a chamada regra: 3 por 2, três dias presencialmente na escola e dois de forma remota. No mais, todo código aqui implementado poderá ser adaptado as outras estratégias de rodízio, dentre elas: 2 por 3, 4 por 1 ou 2 por 2.


Em suma, chegamos ao final deste post, espero para que você tenha gostado, do que foi compartilhado. Ressalto que o mesmo surgiu da necessidade de se tentar de forma rápida estabelecer um recurso computacional capaz de automatizar esta necessidade.

Todavia, esta é a primeira versão considerada usual, todo ambiente para alimentar o banco de dados com os dados de alunos, turmas, horários, professores, enfim todo ambiente Escolar está sendo criado, que posteriormente será incorporado a este código.

 

Versão em PDF e TXT

Agora você vai poder também baixar este post diretamente para seu device, fazer uso do mesmo no momento em que desejar, o qual poderá ser compartilhado livremente ou impresso.

Basta clicar nas opções de imagens abaixo para escolher o formato do arquivo desejado:

 

 

Por questões de compatibilidade com a plataforma WordPress, o arquivo .txt foi renomeado, também o acréscimo da extensão .docx, sendo assim, após a realização do download a mesma deve ser removida.

Referências

  1. https://docs.microsoft.com/pt-br/sql/t-sql/queries/with-common-table-expression-transact-sql
  2. https://docs.microsoft.com/en-us/sql/t-sql/functions/dateadd-transact-sql?view=sql-server-ver15
  3. https://docs.microsoft.com/en-us/sql/t-sql/functions/datename-transact-sql?view=sql-server-ver15
  4. https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15
  5. https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql?view=sql-server-ver15
  6. https://docs.microsoft.com/en-us/sql/t-sql/functions/month-transact-sql?view=sql-server-ver15
  7. https://docs.microsoft.com/en-us/sql/t-sql/functions/year-transact-sql?view=sql-server-ver15
  8. https://docs.microsoft.com/en-us/sql/t-sql/functions/concat-transact-sql?view=sql-server-ver15
  9. https://docs.microsoft.com/en-us/sql/t-sql/functions/replace-transact-sql?view=sql-server-ver15

             

Posts Anteriores

  1.  Dica do Mês – Conhecendo o Intelligent Query Processing através da Scalar User Defined Function Inlining no Microsoft SQL Server 2019 – Junior Galvão – MVP – Data Platform (wordpress.com)
  2. https://pedrogalvaojunior.wordpress.com/2020/01/30/dicadomesconcatenandoarelacaodemunicipiosporestadosatravesdousodafuncaostuff/
  3. https://pedrogalvaojunior.wordpress.com/2019/09/29/dicadomesidentificandoosnumerosausentesemumasequencianumerica/
  4. https://pedrogalvaojunior.wordpress.com/2019/05/28/dicadomesanalisando-ocomportamentodocomandodbcccleantable/
  5. https://pedrogalvaojunior.wordpress.com/2019/03/27/dicadomesaplicandoanalisecombinatorianomicrosoftsqlserver/

Conclusão

Mais uma vez fico surpreendido com toda a capacidade de processamento, flexibilidade e principalmente o potencial existente na linguagem Transact-SQL, a qual nos permite implementar as mais diversas formas se encontrar possíveis soluções ou adaptações as necessidades do dia-a-dia.

Este é o fantástico Microsoft SQL Server, produto tão fascinante que a cada dia eu não consigo deixar de querer estudar, que nos possibilita aprender sempre, transformando conceitos e conhecimentos bem difundidos em fontes de sabedoria e alternativas modernas para a solução de problemas.

 

Agradecimentos

Agradeço a você por sua atenção e visita ao meu blog. Fique à vontade para enviar suas críticas, sugestões, observações e comentários.

Nos encontramos no próximo post da sessão Dica do Mês a ser publicado em breve.

Um forte abraço.

Até mais.

Post Destacado

Dica do Mês – Conhecendo o Intelligent Query Processing através da Scalar User Defined Function Inlining no Microsoft SQL Server 2019


Boa tarde, boa tarde a todos, em especial a você amante de banco de dados relacional, principalmente ao Microsoft SQL Server.

Que bom lhe encontrar aqui em mais um post da sessão Dica do Mês, a qual também está passando por algumas mudanças de layout e dinâmica no seu conteúdo para tentar neste momento em que estamos todos em casa oferecer algo mais simples, prático e direto as suas necessidades, bem como, tornando a leitura mais direta ao assunto sem mais enrolações.

Você já deve ter notado em posts de outras sessões, algumas novidades, como o uso de imagens que se relacionam com o tema, a possibilidade de download do conteúdo do post em arquivo .PDF, o acréscimo da sessão links relacionados ao tema, enfim, alguns ajustes e melhorias que vão sendo realizados ao longo do tempo, de acordo com as sugestões, críticas e observações enviadas diariamente pelos mais de 1200 seguidores aqui presentes neste momento.

Para os posts da sessão Dica do Mês, você vai poder observar também algumas novidades, além do conteúdo compartilhado em arquivo .PDF, teremos adicionalmente uma versão do código fonte compartilhada no formato .TXT, em paralelo a este conteúdo disponibilizado para que você possa trabalhar offline, os códigos fontes aqui presentes no post, serão publicados no formato de imagens (no post versão web, já o arquivo no formato .PDF terá todo o conteúdo do código fonte adicionado no formato original), contendo números de linhas de forma sequência, ao invés de postados de forma separada em blocos de código que as vezes se tornam ilegíveis ou de difícil compreensão, por fim, o uso das imagens é uma forma de lhe proporcionar uma navegação mais limpa, colorida e organizada.

Continuar lendo

Post Destacado

#28 – Para que serve


Olá pessoal, boa tarde!!!

E aí, estão no ritmo do carnaval? Se for igual eu tenho a certo que não, particularmente eu não sou muito adepto desta tradicional festa brasileira e nos últimos anos considerada mundial, mesmo assim vou fazer uso dela na escrita deste post para ajudar você a se sentir na avenida.

Que bom saber que mesmo neste feriadão que estamos vivendo você está dando uma passadinha aqui no meu blog, espero que esta visita possa ser muito proveitosa e enriquecedora.

No post de hoje, vou demonstrar um dos mais tracionais operadores relacionais existente no Microsoft SQL Server adicionado a partir da versão 2005, que nos permite utilizar como expressões de Table-Valued (Tabela Valorizada) dentro de outra tabela. Tenho a certeza que em algum momento você já deve ter feito uso deste operador.

Continuar lendo

Post Destacado

Dica do Mês – Concatenando a relação de municípios por Estados através do uso da função Stuff()


Bom dia, boa tarde, boa noite…. Olá pessoal!

Tudo bem? Estou de volta neste finalzinho de férias de começo de ano, com mais um post da sessão Dica do Mês. Você já está preparado para volta as aulas?

Com certeza, todo meu planejamento de atividades, provas, exercícios, seminários, entre outros estão prontos, dediquei os primeiros dias deste mês de janeiro justamente para isso, gosto de me antecipar justamente para ter tempo hábil caso seja necessário fazer alguma alteração.

A primeira dica do mês de 2020 não se relaciona com volta as aulas, na verdade ela surgiu nos últimos dias devido a um estudo que estou fazendo para minha dissertação de mestrado, algo que ainda se encontra meio nebuloso na minha cabeça.

Venho desde o ano de 2017 acompanhando mudanças climáticas nas regiões, estados e municípios do nosso Brasil, o que me fez em 2018 montar um ambiente de estudo com dados reais e hipotéticos para aplicar alguns modelos matemáticos afim de obter dados que possam ser estudados em relação as queimadas ocorridas em pontos específicos.

Dentre estes dados armazenados tenho uma tabela que contempla um pequeno cadastro de Estado, Municípios e Regiões que utilizo em um outro ambiente de Data Warehouse, com base, na metodologia ROLAP (Relational On Line Analitical Processing), técnica que possibilita construir uma estrutura baseada no conceito relacional aplicada a forma de processamento analítica.

Foi baseado mais uma vez neste cenário, em conjunto com os estudos que constantemente venho fazendo que elaborei a ideia para ser apresentada neste post, o qual tem o objetivo básico de demonstrar como podemos fazer uso da função para trabalhar com caracteres string Stuff() existente no Microsoft SQL Server 2008 como podemos concatenar para cada linha de Estados armazenados em minha respectiva tabela a sua lista de municípios, em adicional a quantidade de municípios existentes nesta relação de acordo com o respectivo estado.

Desta forma, sem mais delongas, espero conseguir mitigar a sua curiosidade e apresentar algo interessante. Seja bem-vindo ao post – Dica do Mês – Concatenando a relação de municípios por Estados através do uso da função Stuff().

Continuar lendo

Post Destacado

#27 – Para que serve


Salve galera, boa tarde!

Tudo bem? Que bom poder te encontrar novamente aqui no meu blog. Este é o post de número 27 da sessão Para que serve, o último dedicado exclusivamente a ela neste ano de 2019.

No post de hoje, vou compartilhar uma das mais arriscadas atividades que um DBA ou Administrador de Banco de Dados pode se deparar em ter que executar em suas atividades.

Talvez você nunca tenha tido a necessidade de executar tal procedimento, mas é sempre bom estar preparado para qualquer necessidade, principalmente em momento de possíveis manutenções em seu ambiente que podem surgir inesperadamente.

De forma direta, vou apresentar como podemos através da linguagem Transact-SQL em conjunto com os recursos de Sistema de Arquivos (File System) alterar as configurações de nossos bancos de dados, mais diretamente relacionada aos arquivos que estão sendo utilizados em um especifico banco de dados.

Você pode estar se perguntando, mas qual é a configuração que você está se referindo Galvão? A resposta como costume de forma simples e direta: “Ao nome dos arquivos que estão sendo utilizados pelo banco de dados, no nosso cenário ao arquivo de log.”

Quem nunca por alguma necessidade técnica, regra de negócio ou até mesmo erro no momento da criação do seu banco de dados, criou os arquivos com nomes ou extensões fora dos padrões utilizados.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 25 da sessão Para que serve. Mas uma vez, bem-vindo ao #27 – Para que serve – Renomeando fisicamente os nomes dos arquivos que compõem um banco de dados sem correr riscos.

Espero que você esteja animado para conhecer este procedimento, caso já conheça, continue lendo este post, sempre podemos aprender algo novo….

Introdução

Todo o banco de dados SQL Server tem, no mínimo, dois arquivos de sistema operacional: um arquivo de dados e um arquivo de log.

Os arquivos de dados contêm dados e objetos como tabelas, índices, procedimentos armazenados e exibições, estes arquivos de dados podem ser agrupados em grupos de arquivos para propósitos de alocação e administração.

Os arquivos de log contêm as informações necessárias para recuperar todas as transações no banco de dados.

Estes arquivos de banco de dados do SQL Server possuem diversas propriedades, dentre eles dois nomes: um é o nome lógico do arquivo e o outro é o nome do arquivo físico.

O nome do arquivo lógico é usado com alguns comandos T-SQL, como DBCC Shrinkfile. O nome do arquivo de banco de dados físico é o nome do arquivo real criado em seus diretórios do sistema operacional durante a criação do banco de dados. O SQL Server não exige manter nomes de arquivos lógicos exclusivos em uma instância de servidor SQL, mas, idealmente, devemos mantê-los únicos para evitar qualquer confusão.

Quando restauramos um banco de dados, os nomes lógicos dos arquivos do banco de dados não mudam e são os mesmos que o banco de dados de origem. Então, se você estiver restaurando vários bancos de dados com o mesmo arquivo de backup, os nomes de arquivos lógicos serão os mesmos para todos os bancos de dados restaurados.

Se você quiser alterar os nomes de arquivos lógicos de seus arquivos de banco de dados, então está post poderá lhe ajudar.

Através deste post, vou demonstrar um dos possíveis métodos que podem ser utilizados para mudar o nome de um arquivo de banco de dados físico usando o método de desapego com comandos T-SQL.

Recomendações: Este procedimento deve ser realizado em ambientes de testes e desenvolvimento, sempre acompanhado da execução de um backup antes de qualquer tipo de alteração. Você vai notar que estarei utilizando o comando Alter Database acompanhado da instrução With Rollback Immediate, a qual é de extrema importância, pois em caso de alguma falha na alteração das configurações, o SQL Server reverterá imediatamente a mudança que estava sendo aplicada e voltará para o estado anterior de funcionamento.

Continuar lendo

Post Destacado

#26 – Para que serve


Olá, pessoal, bom dia.

Como vocês estão? Já fazem alguns meses que não nos encontramos nesta sessão em meu blog, fico feliz em te encontrar novamente. Seja bem-vindo a mais um post da sessão Para que Serve, post de número 26, em mais um dia de muitas atividades, afazeres e compromissos profissionais, domésticos (sim, eu adoro ajudar a minha esposa, cuidar da nossa casa…..) e claro acadêmicos.

Neste post quero destacar uma parte de um dos recursos mais importantes, impactantes e tradicionais do Microsoft SQL Server existente deste sua primeira versão, o qual esta totalmente relacionamento com o comportamento de nossas transações, querys e processamentos que possam estar sendo realizados neste momento em nossos servidores ou instâncias.

Sendo direto e reto no assunto, você que esta neste momento lendo este post e trabalhando com seus dados, tabelas e bancos no SQL Server esta fazendo uso dele sem talvez saber que ele exista, me refiro ao tradicionais Níveis de Isolamento de Transações ou Transaction Isolation Levels.

Você se lembra da existência deste recurso e o quanto ele é importante? Pois bem, caso não se lembra, a partir deste post e provavelmente os próximos 2 ou 3 futuros serão dedicados nesta sessão a apresentar de forma simples, prática e muito didática como podemos fazer uso deste recurso em nossas transações, seus comportamentos, vantagens e desvantagens (isso se elas existirem) e principalmente os riscos ao fazer uso talvez de uma forma não muito indicada.

Sendo assim, chegou a hora de conhecer um pouco mais sobre o post de número 25 da sessão Para que serve. Mas uma vez, bem vindo ao #26 – Para que serve – Apresentando os nível de isolamento Read Uncommitted.

Espero que você esteja animado para conhecer um pouco mais sobre este recurso, caso já conheça, continue lendo este post, sempre podemos aprender algo novo….

Continuar lendo

Post Destacado

Dica do Mês – Como ficar “quase louco” utilizando análise combinatória no Microsoft SQL Server


Olá, boa noite.

Estamos no mês de março, carnaval já passou, o primeiro trimestre de 2019 está acabando, e para minha alegria te encontro mais uma vez no meu blog, caso esta seja a sua primeira visita ou acesso, fico mais feliz ainda, seja muito bem-vindo.

Este é mais um post da sessão Dica do Mês, sessão dedicada a compartilhar bimestralmente dicas, novidades, curiosidades e demais assuntos, conteúdos e informações relacionadas ao Microsoft SQL Server, Banco de Dados e Tecnologias de Banco de Dados.

No post de hoje, quero compartilhar com vocês a minha mais nova “loucura” criada em meus ambientes de estudos acadêmicos para ser utilizada no Microsoft SQL Server através do uso da Análise Combinatória, isso mesmo mais uma vez a matemática esta presente em nossas vidas e desta vez foi justamente para permitir a criação de um script que permite criar todas as sequência de combinações de letras e números afim de construir um gerador de placas de carros para todos os estados brasileiros.

Não parece realmente coisa de louco, minha esposa disse que sim, eu também acho (kkkkk).

Pois bem, ficou curioso para saber como eu criei mais esta “loucura”? Calma, daqui a pouco eu conto mais sobre isso para você.

Sendo assim, sem mais delongas, vamos em frente, vou tentar mitigar a sua curiosidade e ao mesmo também satisfazer os meus objetivos. Seja bem-vindo ao post – Dica do Mês – Como ficar “quase louco” utilizando análise combinatória no Microsoft SQL Server.


Introdução

Muito se fala que a área de banco de dados, e posteriormente os Sistemas Gerenciadores de Bancos de Dados (SGBDs) nasceram dos métodos, técnicas e também das teorias existentes na Matemática.

A cada dia eu tenho mais certeza que esta analogia é verdadeira, e neste post, eu pretendo justamente mostrar como mais uma vez esta fantástica e grandiosa área de estudos e conhecimentos pode nos ajudar a transformar algo que parece ter um nível de raciocínio tão complexo ou talvez impossível, em algo na verdade simples, fácil e de rápida compreensão.

Para ser mais direto, estou me referindo a análise combinatória, uma das mais variadas áreas de conhecimento e aprendizado existentes na Matemática e que este mero ser humano demorou um bom tempo para conseguir entender de verdade e aplicar de forma bem racional.

ANÁLISE COMBINATÓRIA

Podemos determinar a análise combinatória como sendo um conjunto de possibilidades constituídos por elementos finitos, a mesma baseia-se em critérios que possibilitam a contagem. Realizamos o seu estudo na lógica matemática, analisando possibilidades e combinações.

Por exemplo: Descubra quantos números com 3 algarismos conseguimos formar com o conjunto numérico {1, 2, 3}, olha a teoria de conjuntos aí gente….

  • Conjunto de elementos finito: {1, 2, 3}.
  • Conjunto de possibilidades de números com 3 algarismos: {123, 132, 213, 231, 312, 321}.

A análise combinatória estuda os seguintes conteúdos:

  • Princípio fundamental da contagem;
  • Fatorial;
  • Permutação simples;
  • Permutação com repetição;
  • Arranjo simples; e
  • Combinação simples.

Não vou abortar todos estes conteúdos de estudo utilizado pela análise combinatória neste post, mas sim o que mais entendo como importante e de extrema necessidade para o cenário que estaremos utilizando a posterior, sendo estes:

  • Permutação Simples; e
  • Permutação com repetição.

Permutação simples

Na permutação os elementos que compõem o agrupamento mudam de ordem, ou seja, de posição. Determinamos a quantidade possível de permutação dos elementos de um conjunto, com a seguinte expressão:

Pn = n!
Pn = n . (n-1) . (n-2) . (n-3)…..1!

Exemplo: Em uma eleição para representante de sala de aula, 3 alunos candidataram-se: Fernanda, Eduardo e Malú. Quais são os possíveis resultados dessa eleição?

  • Fernanda (F);
  • Eduardo (E); e
  • Malú (M).

Os possíveis resultados dessa eleição podem ser dados com uma permutação simples, acompanhe:

n = 3 (Quantidade de candidatos concorrendo a representante)

Pn = n!

Pn = 3 . 2 . 1!
Pn = 6

Para a eleição de representante, temos 6 possibilidades de resultado, em relação a posição dos candidatos, ou seja, 1º, 2º e 3º lugar.

Veja a seguir os possíveis resultados dessa eleição:

Resultado 1 Resutado 2 Resultado 3 Resultado 4 Resultado 5 Resultado 6
FEM FME EFM EMF MEF


M
FE

Permutação com repetição

Nessa permutação alguns elementos que compõem o evento experimental são repetidos, quando isso ocorrer devemos aplicar a seguinte fórmula:

Pn(n1,n2,n3…nk)=n!n1!⋅n2!⋅n3!…nk!

  • Pn(n1,n2,n3…nk) = permutação com repetição
  • n! = total de elemetos do evento
  • n1!⋅n2!⋅n3!…nk! = Elementos repetidos do evento

Exemplo: Quantos anagramas são possíveis formar com a palavra CASA. A palavra CASA possui:
4 letras (n) e duas vogais que se repetem (n1).

  • n! = 4!
  • n1! = 2!

Pn(n1)=n!n1!

Pn(n1)=4!2!

Pn(n1)=4⋅3⋅2⋅1!2⋅1!

Pn(n1)=242=12

Anagramas da palavra CASA sem repetição


C
ASA

ACSA ASCA ASAC SCAA


C
SAA

AASC AACS CAAS SAAC SACA


A
CAS

Bom, agora que conhecemos um pouco destes conceitos, você pode estar se perguntando:

“O que o Microsoft SQL Server tem haver com isso?”.

Então, tudo, pois ele faz justamente uso destes elementos e dos demais quando queremos realizar as combinações das mais variadas possíveis que envolvem letras, letras e números, ou somente números.

E aí, até aqui tudo tranquilo? Espero que sim, pois daqui em diante começaremos a preparar nosso ambiente e aplicaremos a análise combinatória e as permutações para colocarmos em funcionamento a minha “loucura”.

Para você ter a ideia do nível de loucura que estaremos trabalhando, ao realizar o uso das vinte e seis letras do alfabeto em nosso idioma da língua portuguesa teremos basicamente a seguinte permutação com repetição:

  • n! = 3!
  • n1! = 26!

Ou seja, de forma mais simples, vamos permutar: 26 letras * 26 letras * 26 letras, o que não apresentara um total de: 17.756 (Dezessete Mil, Setecentos e Cinquenta e Seis) combinações de letras distintas.

Mas não terminamos isso nossa caminhada, depois de realizar estas combinações de letras (17.756), vamos fazer uso dos arranjos (este conteúdo eu não abordei), que nos permitirá criar em tempo real todos os agrupamentos entre letras e números (de 0 até 9999), estabelecendo a seguinte fórmula:

Arranjos = LetrasCombinadas(17756) * Numeracao(0…9999) = 177.542.244

os anagramas que vimos apouco, como por exemplo: AAA-0001, o qual vai nos permitir obter um total de: 177.542.244 (Cento e Setenta e Sete Milhões, Quinhentos e Quarente e Dois Mil, Duzentas e Quarenta e Quatro) agrupamentos ou arranjos únicos e distintos que teremos a disposição para serem armazenados.

Não é algo de louco mesmo?

NOSSO AMBIENTE

Como de costume vamos utilizar um ambiente isolado dos demais bancos de dados que você possa conter, desta maneira nosso cenário será constituído dos seguintes elementos:

  • Banco de Dados: GeradorDePlacas;
  • Tabelas: LetrasCombinadas, Numeracao, Placas e FaixasDePlacasPorEstado;
  • CTEs: CTEMeuAlfabeto; e
  • Stored Procedure: P_PesquisarPlacas.

Criando o ambiente

Através do Bloco de Código 1 apresentado abaixo, vamos realizar a criação dos respectivos elementos destacados anteriormente:

— Bloco de Código 1 —

— Criando o Banco de Dados —

Create Database GeradorDePlacas

Go

— Acessando o Banco de Dados —

Use GeradorDePlacas

Go

— Desativando a contagem de linhas —

Set NoCount On

Go

— Criando a Tabela LetrasCombinadas para armazenar todas as combinações de Letras —

Create Table LetrasCombinadas

(CodigoSequencialLetrasCombinadas SmallInt Primary Key Identity(1,1) Not Null,

SequencialDeLetrasCombinadas Char(3) Not Null)

Go

— Criando a Tabela Numeracao para armazenar a faixa numérica de 1 até 9999 —

Create Table Numeracao

(CodigoNumeracao SmallInt Primary Key Identity(1,1) Not Null)

Go

— Criando a Tabela Placas para armazenar o CodigoSequencialLetrasCombinadas e o número da Placa —

Create Table Placas

(CodigoSequencialPlacas Int Primary Key Identity(1,1) Not Null,

CodigoSequencialLetrasCombinadas SmallInt Not Null,

CodigoSequencialNumeroPlacas SmallInt Not Null)

Go

— Criando a Tabela FaixasDeFaixasDePlacasPorEstado para armazenar as faixas de placas por Estado —

Create Table FaixasDePlacasPorEstado

(CodigoSequencialFaixasDePlacasPoEstado TinyInt Primary Key Identity(1,1) Not Null,

CodigoSequencialFaixasDeLetrasNumerosInicial Char(7) Not Null,

CodigoSequencialFaixasDeLetrasNumerosFinal Char(7) Not Null,

FaixasDePlacasPorEstadoNomeDoEstado Varchar(30) Not Null)

Go

— Inserindo a distribuição de Faixas de Placas Por Estado —

Insert Into FaixasDePlacasPorEstado Values (‘AAA0001′,’BEZ9999′,’Paraná’)

Insert Into FaixasDePlacasPorEstado Values (‘BFA0001′,’GKI9999′,’São Paulo’)

Insert Into FaixasDePlacasPorEstado Values (‘GKJ0001′,’HOK9999′,’Minas Gerais’)

Insert Into FaixasDePlacasPorEstado Values (‘HOL0001′,’HQE9999′,’Maranhão’)

Insert Into FaixasDePlacasPorEstado Values (‘HQF0001′,’HTW9999′,’Mato Grosso do Sul’)

Insert Into FaixasDePlacasPorEstado Values (‘HTX0001′,’HZA9999′,’Ceará’)

Insert Into FaixasDePlacasPorEstado Values (‘HZB0001′,’IAP9999′,’Sergipe’)

Insert Into FaixasDePlacasPorEstado Values (‘IAQ0001′,’JDO9999′,’Rio Grande do Sul’)

Insert Into FaixasDePlacasPorEstado Values (‘JDP0001′,’JKR9999′,’Distrito Federal’)

Insert Into FaixasDePlacasPorEstado Values (‘JKS0001′,’JSZ9999′,’Bahia’)

Insert Into FaixasDePlacasPorEstado Values (‘JTA0001′,’JWE9999′,’Pará’)

Insert Into FaixasDePlacasPorEstado Values (‘JWF0001′,’JXY9999′,’Amazonas’)

Insert Into FaixasDePlacasPorEstado Values (‘JXZ0001′,’KAU9999′,’Mato Grosso’)

Insert Into FaixasDePlacasPorEstado Values (‘KAV0001′,’KFC9999′,’Goiás’)

Insert Into FaixasDePlacasPorEstado Values (‘KFD0001′,’KME9999′,’Pernambuco’)

Insert Into FaixasDePlacasPorEstado Values (‘KMF0001′,’LVE9999′,’Rio de Janeiro’)

Insert Into FaixasDePlacasPorEstado Values (‘LVF0001′,’LWQ9999′,’Piauí’)

Insert Into FaixasDePlacasPorEstado Values (‘LWR0001′,’MMM9999′,’Santa Catarina’)

Insert Into FaixasDePlacasPorEstado Values (‘MMN0001′,’MOW9999′,’Paraíba’)

Insert Into FaixasDePlacasPorEstado Values (‘MOX0001′,’MTZ9999′,’Espírito Santo’)

Insert Into FaixasDePlacasPorEstado Values (‘MUA0001′,’MVK9999′,’Alagoas’)

Insert Into FaixasDePlacasPorEstado Values (‘MVL0001′,’MXG9999′,’Tocantins’)

Insert Into FaixasDePlacasPorEstado Values (‘MXH0001′,’MZM9999′,’Rio Grande do Norte’)

Insert Into FaixasDePlacasPorEstado Values (‘MZN0001′,’NAG9999′,’Acre’)

Insert Into FaixasDePlacasPorEstado Values (‘NAH0001′,’NBA9999′,’Roraima’)

Insert Into FaixasDePlacasPorEstado Values (‘NBB0001′,’NEH9999′,’Rondônia’)

Insert Into FaixasDePlacasPorEstado Values (‘NEI0001′,’NFB9999′,’Amapá’)

Insert Into FaixasDePlacasPorEstado Values (‘NFC0001′,’NGZ9999′,’Goiás’)

Insert Into FaixasDePlacasPorEstado Values (‘NHA0001′,’NHT9999′,’Maranhão’)

Insert Into FaixasDePlacasPorEstado Values (‘NHU0001′,’NIX9999′,’Piauí’)

Insert Into FaixasDePlacasPorEstado Values (‘NIY0001′,’NJW9999′,’Mato Grosso’)

Insert Into FaixasDePlacasPorEstado Values (‘NJX0001′,’NLU9999′,’Goiás’)

Insert Into FaixasDePlacasPorEstado Values (‘NLV0001′,’NMO9999′,’Alagoas’)

Insert Into FaixasDePlacasPorEstado Values (‘NMP0001′,’NNI9999′,’Maranhão’)

Insert Into FaixasDePlacasPorEstado Values (‘NNJ0001′,’NOH9999′,’Rio Grande do Norte’)

Insert Into FaixasDePlacasPorEstado Values (‘NOI0001′,’NPB9999′,’Amazonas’)

Insert Into FaixasDePlacasPorEstado Values (‘NPC0001′,’NPQ9999′,’Mato Grosso’)

Insert Into FaixasDePlacasPorEstado Values (‘NPR0001′,’NQK9999′,’Paraíba’)

Insert Into FaixasDePlacasPorEstado Values (‘NQL0001′,’NRE9999′,’Ceará’)

Insert Into FaixasDePlacasPorEstado Values (‘NRF0001′,’NSD9999′,’Mato Grosso do Sul’)

Insert Into FaixasDePlacasPorEstado Values (‘NSE0001′,’NTC9999′,’Pará’)

Insert Into FaixasDePlacasPorEstado Values (‘NTD0001′,’NTW9999′,’Bahia’)

Insert Into FaixasDePlacasPorEstado Values (‘NTX0001′,’NUG9999′,’Mato Grosso’)

Insert Into FaixasDePlacasPorEstado Values (‘NUH0001′,’NUL9999′,’Roraima’)

Insert Into FaixasDePlacasPorEstado Values (‘NUM0001′,’NVF9999′,’Ceará’)

Insert Into FaixasDePlacasPorEstado Values (‘NVG0001′,’NVN9999′,’Sergipe’)

Insert Into FaixasDePlacasPorEstado Values (‘NVO0001′,’NWR9999′,’Goiás’)

Insert Into FaixasDePlacasPorEstado Values (‘NWS0001′,’NXQ9999′,’Maranhão’)

Insert Into FaixasDePlacasPorEstado Values (‘NXR0001′,’NXT9999′,’Acre’)

Insert Into FaixasDePlacasPorEstado Values (‘NXU0001′,’NXW9999′,’Pernambuco’)

Insert Into FaixasDePlacasPorEstado Values (‘NXX0001′,’NYG9999′,’Minas Gerais’)

Insert Into FaixasDePlacasPorEstado Values (‘NYH0001′,’NZZ9999′,’Bahia’)

Insert Into FaixasDePlacasPorEstado Values (‘OAA0001′,’OAO9999′,’Amazonas’)

Insert Into FaixasDePlacasPorEstado Values (‘OAP0001′,’OBS9999′,’Mato Grosso’)

Insert Into FaixasDePlacasPorEstado Values (‘OBT0001′,’OCA9999′,’Pará’)

Insert Into FaixasDePlacasPorEstado Values (‘OCB0001′,’OCU9999′,’Ceará’)

Insert Into FaixasDePlacasPorEstado Values (‘OCV0001′,’ODT9999′,’Espírito Santo’)

Insert Into FaixasDePlacasPorEstado Values (‘ODU0001′,’OEI9999′,’Piauí’)

Insert Into FaixasDePlacasPorEstado Values (‘OEJ0001′,’OES9999′,’Sergipe’)

Insert Into FaixasDePlacasPorEstado Values (‘OET0001′,’OFH9999′,’Paraíba’)

Insert Into FaixasDePlacasPorEstado Values (‘OFI0001′,’OFW9999′,’Pará’)

Insert Into FaixasDePlacasPorEstado Values (‘OFX0001′,’OGG9999′,’Paraíba’)

Insert Into FaixasDePlacasPorEstado Values (‘OGH0001′,’OHA9999′,’Goiás’)

Insert Into FaixasDePlacasPorEstado Values (‘OHB0001′,’OHK9999′,’Alagoas’)

Insert Into FaixasDePlacasPorEstado Values (‘OHL0001′,’OHW9999′,’Rondônia’)

Insert Into FaixasDePlacasPorEstado Values (‘OHX0001′,’OIQ9999′,’Ceará’)

Insert Into FaixasDePlacasPorEstado Values (‘OIR0001′,’OJK9999′,’Maranhão’)

Insert Into FaixasDePlacasPorEstado Values (‘OJR0001′,’OKC9999′,’Rio Grande do Norte’)

Insert Into FaixasDePlacasPorEstado Values (‘OKI0001′,’OLG9999′,’Bahia’)

Insert Into FaixasDePlacasPorEstado Values (‘OLH0001′,’OLN9999′,’Tocantins’)

Insert Into FaixasDePlacasPorEstado Values (‘OLO0001′,’OMH9999′,’Minas Gerais’)

Insert Into FaixasDePlacasPorEstado Values (‘OMI0001′,’OOF9999′,’Goiás’)

Insert Into FaixasDePlacasPorEstado Values (‘OOG0001′,’OOU9999′,’Mato Grosso do Sul’)

Insert Into FaixasDePlacasPorEstado Values (‘OOV0001′,’ORC9999′,’Minas Gerais’)

Insert Into FaixasDePlacasPorEstado Values (‘ORD0001′,’ORM9999′,’Alagoas’)

Insert Into FaixasDePlacasPorEstado Values (‘ORN0001′,’OSV9999′,’Ceará’)

Insert Into FaixasDePlacasPorEstado Values (‘OSW0001′,’OTZ9999′,’Pará’)

Insert Into FaixasDePlacasPorEstado Values (‘OUA0001′,’OUE9999′,’Piauí’)

Insert Into FaixasDePlacasPorEstado Values (‘OUF0001′,’OVD9999′,’Bahia’)

Insert Into FaixasDePlacasPorEstado Values (‘OVE0001′,’OWC9999′,’Espírito Santo’)

Insert Into FaixasDePlacasPorEstado Values (‘OWD0001′,’OYG9999′,’Santa Catarina’)

Insert Into FaixasDePlacasPorEstado Values (‘PEE0001′,’PFQ9999′,’Pernambuco’)

Insert Into FaixasDePlacasPorEstado Values (‘PFR0001′,’PGK9999′,’Pernambuco’)

Insert Into FaixasDePlacasPorEstado Values (‘PGL0001′,’PHE9999′,’Pernambuco’)

Insert Into FaixasDePlacasPorEstado Values (‘SAV0001′,’SAV9999′,’São Paulo’)

Go

— Validando os dados inseridos na Tabela FaixasDePlacasPorEstado —

Select * From FaixasDePlacasPorEstado
Go

— Inserindo 9999 linhas de registros lógicos na Tabela Numeracao —

Insert Into Numeracao Default Values

Go 9999

— Validando os dados inseridos na Tabela Numeracao —

Select * From Numeracao

Go

Muito bem, agora que temos nossa estrutura quase toda montada, vamos avançar mais um pouco e fazer uso da análise combinatória, conforme o Bloco de Código 2 declarado abaixo:

— Bloco de Código 2 —

 

— Montando a CTE Recursiva para Gerar todas as combinações de Letras —

;With CTEMeuAlfabeto

As

(Select * From (Values (‘A’),(‘B’),(‘C’),(‘D’),(‘E’),(‘F’),(‘G’),(‘H’),(‘I’),(‘J’),(‘K’),

(‘L’),(‘M’),(‘N’),(‘O’),(‘P’),(‘Q’),(‘R’),(‘S’),(‘T’),(‘U’),(‘V’),

(‘W’),(‘X’),(‘Y’),(‘Z’)) As Alfabeto (LetrasDoAlfabeto)

)

— Inserindo as combinações de letras na Tabela LetrasCombinadas —

Insert Into LetrasCombinadas

Select Distinct Concat(A1.LetrasDoAlfabeto, A2.LetrasDoAlfabeto, A3.LetrasDoAlfabeto) As ConcatenacaoLetrasCombinadas

From CTEMeuAlfabeto A1

Cross Join CTEMeuAlfabeto A2 — Aqui que a mágia acontece —

Cross Join CTEMeuAlfabeto A3 — O cross join vai cruzar e combinar todas as letras —

Order By ConcatenacaoLetrasCombinadas Asc

Go

— Validando os dados inseridos na Tabela LetrasCombinadas —

Select * From LetrasCombinadas

Go

Nosso Bloco de Código 2 já deve ter sido processado, pois ele é especificamente o centro das atenções para conseguirmos criar todas as combinações possíveis de letras do nosso alfabeto, que estará criando em poucos segundos um total de: 17.756 (Dezessete Mil, Setecentos e Cinquenta e Seis) combinações de letras distintas.

Ufa, estamos avançando, você vai poder notar neste post, que estou fazendo uso de diversos comandos e técnicas existentes no SQL Server desde as primeiras versões como também outros implementados nas versões mais atuais, dentre eles destaco o uso de Tabela Derivada conforme o comando Select From (Values()) existente desde a versão 2000, e também da CTE – Common Table Expression adicionado ao Microsoft SQL Server a partir da versão 2005.

Vamos avançar mais ainda, pois o objetivo deste post não é mostrar somente o uso da análise combinatória, ao contrário, o estudo aqui criado, me permitiu elaborar alguns cenários que me permitiram adotar formas e técnicas diferentes de realizar todas as combinações entre letras e números afim de processar, criar e armazenar todas as placas criadas justamente na tabela denominada placas.

Destaco que foram criados 3 (três) cenários de estudo de acordo com percepções e análises que realizei, fazendo uso de recursos e técnicas distintas visando identificar o que poderia ser melhor utilizada:

  • Cenário 1 – Inserindo dados na Tabela de Placas através de Loop Condicional;
  • Cenário 2 – Inserindo dados na Tabela de Placas através de CTE Recursiva com Junção Cruzada; e
  • Cenário 3 – Inserindo dados na Tabela de Placas através de Junção Cruzada.

Nota: Tenho a certeza que você vai poder criar outros cenários e novas análises, como também, utilizar os mais variados recursos e funcionalidades existentes no Microsoft SQL Server, reforço mais uma vez que estes cenários são meras amostras de estudo e comparações do meu entendimento.

O objetivo de ter criado estes cenários, possibilitou realizarmos comparações de tempo de processamento no que relaciona ao uso da CPU e consumo de memória RAM para cada um dos cenários.

A Tabela 1 declarada abaixo apresenta um resumo dos valores obtidos durante 5 rodadas de processamento executadas em meu ambiente:

Teste
Média de Uso de CPU Média de Uso de Memória em GBs Média de Uso de Disco Rígido Tempo Mínimo de execução

Tempo Máximo de execução

01 77% 4.5 Gbs 75% 19hrs e 23min 21hrs e 18min
02 54% 3.7 Gbs 58% 1hr e 33min 1hr, 42 min e 27s
03 22% 2.2 Gbs 42% 48 min e 13s 59 min e 25s

Tabela 1 – Resumo comparativo do uso médio de CPU, Memória RAM e Disco Rígido, em conjunto com os tempos de processamento demandados para cada cenário.

Show, agora que temos este pequeno resumo dos tempos de processamento e uso dos principais recursos de hardware, já podemos conhecer cada um dos cenários elaborados abaixo, conforme apresenta o Bloco de Código 3 a seguir:

— Bloco de Código 3 —

 — Cenário 1 –

— Inserindo dados na Tabela de Placas através de Loop Condicional – 19Hrs e 33s de processamento —

— Limpando a Tabela de Placas —

Truncate Table Placas

Go

— Declarando as variáveis de controle —

Declare @ContadorSequencialTotalPlacasInseridas Int = 1,

@ContadorSequencialParcialPlacasInseridas Int = 1,

@CodigoSequencialLetrasCombinadas Int = 1

— Abrindo o Loop de Inserção —

While @ContadorSequencialTotalPlacasInseridas <=(Select Max(CodigoSequencialLetrasCombinadas) From LetrasCombinadas)

Begin

Set @CodigoSequencialLetrasCombinadas=(Select CodigoSequencialLetrasCombinadas From LetrasCombinadas

Where CodigoSequencialLetrasCombinadas = @ContadorSequencialTotalPlacasInseridas)

While @ContadorSequencialParcialPlacasInseridas <=9999 — Contador a cada 9999 incrementa a variável @ContadorSequencialTotalPlacasInseridas

Begin

Insert Into Placas (CodigoSequencialLetrasCombinadas, CodigoSequencialNumeroPlacas)

Values (@CodigoSequencialLetrasCombinadas, @ContadorSequencialParcialPlacasInseridas)

Set @ContadorSequencialParcialPlacasInseridas         +=1

End

Set @ContadorSequencialParcialPlacasInseridas = 1

Set @CodigoSequencialLetrasCombinadas +=1

Set @ContadorSequencialTotalPlacasInseridas +=1

End

— Cenário 2 –

— Inserindo dados na Tabela de Placas através de CTE Recursiva com Junção Cruzada — 33 minutos e 40s de processamento —

— Limpando a Tabela de Placas —

Truncate Table Placas

Go

— Declarando as variáveis de controle —

Declare @ContadorSequencialTotalPlacasInseridas Int = 1,

@CodigoSequencialLetrasCombinadas SmallInt = 1

While @ContadorSequencialTotalPlacasInseridas <=(Select Max(CodigoSequencialLetrasCombinadas) From LetrasCombinadas)

Begin

— Realizando a Junção Cruzada entre as Tabelas LetrasCombinadas x CTENumeracao —

;With CTENumeracao

As

(Select 1 As Numero

Union All

Select Numero + 1 From CTENumeracao

Where Numero <=9998

)

Insert Into Placas (CodigoSequencialLetrasCombinadas, CodigoSequencialNumeroPlacas)

Select LC.CodigoSequencialLetrasCombinadas, N.Numero

From LetrasCombinadas LC Cross Join — Aqui acontece a mágia

CTENumeracao N — Cross Joi vai combinar todas as Letras com 9999 números —

Where CodigoSequencialLetrasCombinadas = @CodigoSequencialLetrasCombinadas

Option (MaxRecursion 0)

Set @CodigoSequencialLetrasCombinadas +=1

Set @ContadorSequencialTotalPlacasInseridas +=1

End

Go

— Cenário 3 –

— Inserindo dados na Tabela de Placas através de Junção Cruzada – 10 minutos e 27s de processamento —

— Limpando a Tabela de Placas —

Truncate Table Placas

Go

— Declarando as variáveis de controle —

Declare @ContadorSequencialTotalPlacasInseridas Int = 1,

@CodigoSequencialLetrasCombinadas SmallInt = 1

While @ContadorSequencialTotalPlacasInseridas <=(Select Max(CodigoSequencialLetrasCombinadas) From LetrasCombinadas)

Begin

— Realizando a Junção Cruzada entre as Tabelas LetrasCombinadas x Numeracao —

Insert Into Placas (CodigoSequencialLetrasCombinadas, CodigoSequencialNumeroPlacas)

Select LC.CodigoSequencialLetrasCombinadas, N.CodigoNumeracao

From LetrasCombinadas LC Cross Join — Aqui acontece a mágia

Numeracao N — Cross Joi vai combinar todas as Letras com 9999 números —

Where CodigoSequencialLetrasCombinadas = @CodigoSequencialLetrasCombinadas

Set @CodigoSequencialLetrasCombinadas +=1

Set @ContadorSequencialTotalPlacasInseridas +=1

End

Go

Show, show, e show, nossos três cenários de estudo e testes já estão apresentados, basta você escolher qual deseja brincar, executar, encontrar as melhorias e possíveis falhas que podem existir.

Pra finalizar nossa longa caminhada, apresento o Bloco de Código 4, o qual vai ilustrar como podemos consultar nossas tabelas e obter os dados já inseridos após o processamento de um dos cenários, e por fim o Bloco de Código 5 que apresenta o código utilizado no Bloco de Código 4 transformado em uma Stored Procedure denominada: P_PesquisarPlacas.

— Bloco de Código 4 —

— Apresentando as 100 primeiras Placas Geradas —

Select Top 100 Concat(LC.SequencialDeLetrasCombinadas,’-‘,

Convert(Char(4),Case

When P.CodigoSequencialNumeroPlacas BetWeen 1 And 9 Then Concat(‘000’,P.CodigoSequencialNumeroPlacas)

When P.CodigoSequencialNumeroPlacas BetWeen 10 And 99 Then Concat(’00’,P.CodigoSequencialNumeroPlacas)

When P.CodigoSequencialNumeroPlacas BetWeen 100 And 999 Then Concat(‘0’,P.CodigoSequencialNumeroPlacas)

When P.CodigoSequencialNumeroPlacas BetWeen 1000 And 9999 Then Convert(Char(4),P.CodigoSequencialNumeroPlacas)

End)) As ‘Placa’,

IsNull(F.FaixasDePlacasPorEstadoNomeDoEstado,’Sequência não atribuída…’) As ‘Nome do Estado’

From LetrasCombinadas LC Inner Join Placas P

On LC.CodigoSequencialLetrasCombinadas = P.CodigoSequencialLetrasCombinadas

Left Join FaixasDePlacasPorEstado F

On LC.SequencialDeLetrasCombinadas Between SubString(F.CodigoSequencialFaixasDeLetrasNumerosInicial,1,3)

And SubString(F.CodigoSequencialFaixasDeLetrasNumerosFinal,1,3)

Go

A Figura 1 apresentada abaixo, ilustra o possível resultado obtido após a execução do Bloco de Código 4:

Figura 1 – Relação das 100 primeiras placas de carros criadas e inseridas na tabela Placas.

— Bloco de Código 5 —

— Criando uma Stored Procedure para pesquisa de placas —

Create or Alter Procedure P_PesquisarPlacas @LetrasCombinadas Char(3), @SequenciaNumerica SmallInt = Null

As

Begin

Set NoCount On

Select Concat(LC.SequencialDeLetrasCombinadas,’-‘,

Convert(Char(4),Case

When P.CodigoSequencialNumeroPlacas BetWeen 1 And 9 Then Concat(‘000′,P.CodigoSequencialNumeroPlacas)

When P.CodigoSequencialNumeroPlacas BetWeen 10 And 99 Then Concat(’00’,P.CodigoSequencialNumeroPlacas)

When P.CodigoSequencialNumeroPlacas BetWeen 100 And 999 Then Concat(‘0’,P.CodigoSequencialNumeroPlacas)

When P.CodigoSequencialNumeroPlacas BetWeen 1000 And 9999 Then Convert(Char(4),P.CodigoSequencialNumeroPlacas)

End)) As ‘Placa’,

IsNull(F.FaixasDePlacasPorEstadoNomeDoEstado,’Sequência não atribuída…’) As ‘Nome do Estado’

From LetrasCombinadas LC Inner Join Placas P

On LC.CodigoSequencialLetrasCombinadas = P.CodigoSequencialLetrasCombinadas

Left Join FaixasDePlacasPorEstado F

On LC.SequencialDeLetrasCombinadas Between SubString(F.CodigoSequencialFaixasDeLetrasNumerosInicial,1,3)

And SubString(F.CodigoSequencialFaixasDeLetrasNumerosFinal,1,3)

Where LC.SequencialDeLetrasCombinadas = @LetrasCombinadas

And P.CodigoSequencialNumeroPlacas = @SequenciaNumerica

End

Após a Stored Procedure estar criada, basta realizar sua execução conforme o exemplo apresentado abaixo, passando a sequência de letras e números que você deseja consultar.

Importante: Destaco que algumas combinações de placas de carro ainda não estão sendo utilizadas em nosso território, dentre elas as que começam com as letras: W, X, Y e Z.

— Executando a Stored Procedure P_PesquisarPlacas —

Exec P_PesquisarPlacas ‘FBD’,3127

Go

Sensacional, chegamos ao final, missão cumprida e entregue, acredito que este foi um dos estudos mais prazerosos e de grande obtenção de conhecimento que eu realizei nos últimos meses.

Antes de encerrarmos, gostaria de contar com a sua participação neste post, respondendo a enquete abaixo:

REFERÊNCIAS

https://www.infoescola.com/matematica/analise-combinatoria/

https://mundoeducacao.bol.uol.com.br/matematica/analise-combinatoria.htm

https://docs.microsoft.com/en-us/sql/t-sql/queries/from-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql

https://www.mssqltips.com/sqlservertip/1042/using-derived-tables-to-simplify-the-sql-server-query-process/

https://docs.microsoft.com/pt-br/sql/t-sql/language-elements/select-local-variable-transact-sql

Posts Anteriores

CONCLUSÃO

Como de costume, tenho um imenso prazer em poder compartilhar um pouco das minhas experiências, estudos e conhecimentos que estou diariamente formando sobre este fantástico Sistema Gerenciador de Banco de Dados chamado Microsoft SQL Server.

Hoje não seria diferente, mais uma vez você pode notar o quanto ele é capaz de nos surpreender com sua inteligência, sabedoria, e principalmente sua capacidade de conseguir aplicar as mais variadas técnicas existentes da Matemática para solucionar algo que pode parecer tão complexo para o raciocínio humano.

Neste post, utilizei algumas das mais variadas técnicas para se trabalhar com combinações de dados, utilização de dados em memória através de um Select From (Values()), em conjunto com tabelas criadas fisicamente ou tabelas declaradas como expressões em um CTE.

Por fim, fizemos usado mais uma vez da Matemática aplicando a análise condicional em conjunto com seus elementos de permutação e arranjo de valores.

Através dos cenários apresentados, em conjunto com a gama de recursos que ele nos permite utilizar, conseguimos aplicar as mais variadas preposições de análises de dados que nos possibilita identificar qual cenário pode ser a melhor maneira de se tomar uma decisão.

Este é o fantástico Microsoft SQL Server, produto tão fascinante que a cada dia eu não consigo deixar de querer estudar e conhecer mais ainda.

Agradecimentos

Agradeço a você por sua atenção e visita ao meu blog. Fique à vontade para enviar suas críticas, sugestões, observações e comentários.

Nos encontramos no próximo post da sessão Dica do Mês a ser publicado em breve.

Um forte abraço, curta esta nova estação do ano que começou a alguns dias atrás, eu adoro o outono.

Até mais.

SQL Week Recife Conference – 4ª Edição


Salve galera, bom dia.

Gostaria de agradecer a todos que participaram de mais este grande evento que a comunidade de profissionais da área de Tecnologia e Dados organizou entre os dia 16 e 20 de Janeiro.

Me refiro ao SQL Week Recife Conference – 4ª Edição, um dos maiores eventos semestrais idealizado por profissionais de diversas áreas do conhecimento, destacando suas experiências, aprendizados e vivência acadêmica e profissional.

Agradeço a oportunidade e o convite do Luiz Santana.

Para assistir minha palestra, acesse: 4ª – SQL Week Recife – Dia 5.

#sqlweekrecife #sqlweekrecifeconference #SQLWRC3 #bigdata #sql #analytics #analytics #carreira #desenvolvimento #ai #azure #snowflake #microsoftazure #micorsoft #datafactory #powerbi #transiçãodecarreira #analytics #sqlserver #mvpbuzz #mvp #azuredataengineer #azuredatafactory #dataengineer #conhecimento #carreiras #technology #bancodedados #tecnologia #techcommunity #businessintelligence #dataanalysis #dataarchitect


A seguir compartilho o material utilizado na palestra:


Abraços.