Build 2019 – Os principais anúncios apresentados neste mega evento


O CEO da Microsoft, Satya Nadella, levou ao palco durante o Build 2019 à conferência da empresa um extenso discurso.

Este ano, a Microsoft apresentou aos desenvolvedores uma ampla gama de anúncios relacionados ao novo Microsoft Edge, Fluent design, e muito mais.

Top 5 announcements from Build 2019

Dentre estes diversos anúncios, alguns merecem um destaque maior, dentre eles:

O novo Microsoft Edge considerado mais privado e produtivo

Ainda relativamente cedo para abordar o desenvolvimento do novo Microsoft Edge construído como base no Chromium, mas algumas características novas já podem ser destacadas para usuários corporativos, um modo do Internet Explorer fará com que o Edge funcione com aplicativos Web herdados e sites de dentro de uma guia borda.

Esta nova versão do Microsoft Edge também terá uma nova forma de controle de como os sites podem rastreá-lo pela Web com três níveis de controles de privacidade.

 

Cortana ainda mais conversacional “falante de uma maneira mais coloquial”

Como os assistentes digitais existem atualmente, interagir com eles pode ser relativamente complicado, exigindo frases e comandos específicos para invocar uma ação, uma a uma. Microsoft está olhando para quebrar esse paradigma, integrando Cortana com nova tecnologia AI conversacional.

O resultado, segunda a Microsoft, será mais interações naturais com Cortana. O assistente digital será capaz de seguir o contexto de uma conversação ao manipular várias consultas e habilidades ao mesmo tempo, interagirando com Cortana possibilitando se sentir estivesse falando com outra pessoa.

Um novo e totalmente remodelado windows terminal “prompt-de-comando”

Windows Terminal

Na minha humilde opinião, este foi o anúncio mais sensacional, que mostra como a Microsoft esta procurando se reinventar, olhando para seu legado como fonte de inspiração para trazer novas possibilidades. Hoje a Microsoft abalou as coisas um pouco, anunciando o novo aplicativo de terminal do Windows.

Definido para lançamento em junho, o novo terminal do Windows permite que você defina temas personalizados, use guias e até mesmo usar emoji. Sim, Emoji. Se você usa o PowerShell, Windows Subsystem para Linux, ou CMD, inserindo comandos via Windows terminal deve revelar-se apenas um pouco mais divertido.

Fontes e Direitos Autorais: Dan Thorp-Lancaster – WindowsCentral.com
Leia na integra: https://www.windowscentral.com/top-5-announcements-microsoft-build-2019

Microsoft vai mudar a forma que o Windows Update trabalha


A maioria das empresas sabe que uma guerra com as pessoas que compram e usam seus produtos é uma guerra que eles não podem vencer. A Microsoft reconheceu tardiamente isso em relação às suas políticas do Windows Update. E se você está prestando atenção às mudanças na cultura corporativa em Redmond, a entrega da empresa a seus clientes não deve ser uma surpresa.

A guerra de longo prazo tem a ver com a maneira como o Windows 10 se atualiza em PCs – especificamente, as atualizações significativas duas vezes por ano, chamadas de “atualizações de recursos”, que adicionam novos recursos ao Windows. Por anos, você teve, para todos os propósitos práticos, nenhuma escolha sobre atualizar ou não; o seu PC instalou todas as atualizações automaticamente, quer você goste ou não. (Tecnicamente, você poderia contornar isso, mas não era uma opção que a maioria dos usuários escolheria; mas mais sobre isso em breve.)

Os usuários do Windows não ficaram satisfeitos com isso e por um bom motivo. Frequentemente, as atualizações de recursos foram liberadas antes de estarem prontas para o horário nobre, às vezes até causando danos a PCs e arquivos. Por exemplo, a última, a Atualização do Windows 10 de outubro de 2018, excluiu arquivos sem avisar os usuários, e esses arquivos foram perdidos para sempre. Depois, houve o fiasco do Windows 10 de abril de 2018, quando as pessoas reclamaram que ele travou seus computadores e exibiu a notória tela azul da morte.

O que muda?

Com a próxima versão, o Windows não instalará automaticamente uma atualização com novos recursos quando ela estiver disponível. Em vez disso, o Windows irá notificá-lo que está disponível, mostrando uma mensagem “Fazer download e instalar agora” e um link no painel Configurações do Windows Update. Se você não quiser instalá-lo, basta ignorar a mensagem. Se você quiser instalá-lo, clique no link e siga as instruções. E se você quiser esperar um pouco – alguns dias, algumas semanas, alguns meses – até ter certeza de que a atualização não é problemática, vá em frente e faça isso. O controle, finalmente, está em suas mãos.

Tenha em mente que você ainda terá de instalar os pequenos patches que a Microsoft emite todos os meses. Isso é porque eles geralmente são atualizações de segurança e todos devem tê-los. No entanto, a Microsoft concordou em dar a você algum controle sobre quando eles serão instalados. Você poderá atrasá-los por até 35 dias.

Fontes e Direitos Autorais:Preston Gralla, Computerworld (EUA).
Leia na integra acessando:https://itmidia.com/microsoft-se-rende-em-sua-guerra-do-windows-update-com-usuarios/

#25 – Para que serve


Bom dia, bom dia, bom dia, hoje estou tão feliz (kkkkk)….

Isso parece música, parece não, na verdade é…, aquela musiquinha cantadas todos os dias na entrega da escola, quem nunca cantou esta musiquinha.

Seja bem-vindo a mais um post da sessão Para que Serve, sendo este o de número 25, em mais um dia de muitas atividades, afazeres e compromissos profissionais, domésticos (isso eu não posso comentar aqui….kkkkk) e acadêmicos.

No post de hoje, vou compartilhar com você que esta acessando meu blog, um dos mais tradicionais recursos existentes no Microsoft SQL Server introduzido desde as versões iniciais do produto, mantendo-se sempre atualizada, úteis e principalmente apresentando um pouco perigoso ao ser utilizada quando não se conhece.

Da mesma maneira que realizei no post anterior desta sessão, serei mais direto no assunto, sem qualquer tipo de mistério, suspense ou criar qualquer clima de expectativa sobre este tema, na verdade estou me referindo ao uso das Table Hints (dicas de tabelas), com certeza você já deve ter ouvido falar ou já utilizou pelo menos uma delas.

Ainda não? Não se lembra? Fique tranquilo(a), vou tentar te ajudar a conhecer pouco destas pequenas mas grandiosas funcionalidades existentes no Microsoft SQL Server.

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 #25 – Para que serve – Table Hint – Serializable.

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


Introdução

As dicas de tabela tem um papel muito importante a partir do momento que decidimos fazer uso delas, alterar o comportamento padrão do otimizador de consulta durante a instrução DML (linguagem de manipulação de dados) ao especificar um método de bloqueio, um ou mais índices, uma operação de processamento de consulta, como uma verificação de tabela ou busca de índice, ou outras opções. As dicas da tabela são especificadas na cláusula FROM da instrução DML e afetam apenas a tabela ou exibição referenciada nessa cláusula.

Mesmo sabendo que o otimizador de consulta do SQL Server normalmente seleciona o melhor plano de execução para uma consulta, muitos desenvolvedores e administradores de banco de dados tomam a decisão de fazer uso deste recurso em diversos cenários de forma indiscriminada.

Estas dicas ou table hints, podem ao longo de sua utilização impactar de forma direta na maneira que o otimizador de consultas existente no Microsoft SQL Server trabalha desde o momento da identificação da análise da query e criação do seu plano de execução, mas principalmente no momento da própria execução.

Vale ressaltar que as mesmas serão ignoradas se a tabela não for acessada pelo plano de consulta, isso pode ser provocado porque o query optimizer opta por não acessar a tabela ou porque uma exibição indexada é acessada, mas este cenário também pode ser contornado, quem sabe em outro momento.

Vamos em frente, sabendo que estas funcionalidades precisam ser um pouco mais conhecidas e melhor entendidas, tomei a decisão de elaborar este post, tentando detalhar um pouco mais sobre a table hint Serializable.

Desta forma, vou apresentar uma breve descrição sobre esta dica de tabela, logo na sequência utilizarei um simples cenário prático para demonstrar como podemos fazer da mesma.

Como diria Chapolin Colorado “Siga-me os bons…..”

Table Hint – SERIALIZABLE

A dica de tabela SERIALIZABLE está na outra extremidade do espectro da dica de tabela NoLock (eu costume dizer bem diretamente que ela faz o papel inverso ao NoLock).

Se comparada ao NoLock, a Serializable, apresenta uma consistência extremamente alta, não permite leituras sujas, leituras não repetíveis e leituras fantasmas de dados, o que fortalece ainda mais a aplicação dos pilares ACID: (Atomicidade, Consistência, Isolamento e Durabilidade).

Quando você usa a dica de tabela SERIALIZABLE (também conhecida como HOLDLOCK), ela garante que nenhuma outra transação pode modificar ou ler dados não confirmados na transação atual. Em alguns casos, podemos dizer que ela se torna semelhante ao HOLDLOCK, porém aplica aos locks restrições maiores ao longo da transação.

Em outras palavras, as transações devem aguardar que outras transações sejam concluídas antes de concluir seu trabalho. Isso limita drasticamente a simultaneidade de banco de dados e coloca um prêmio na consistência do banco de dados. Outro ponto importante quando se referimos a table hint Serializable, se relaciona e existência de um nível de isolamento similar a seu comportamento conhecido Isolation Level Serializable.

Para muitos profissionais de SQL Server, ela é uma variação mais completa da table hint Repeatable Read, bloqueando qualquer modificação de dados nas colunas que são consultadas até que sejam concluídas, independente da operação ser um Update ou Insert, esse comportamento fornece uma alta consistência, mas ao custo de uma baixa concorrência.

Agora que conhecemos um pouco mais sobre esta table hint, vamos avançar, conhecer o seu funcionamento de forma prática, para tal, utilizaremos como base o Bloco de Código 1, que realizará a criação do seguinte ambiente:

·         Databases: DatabaseTableHints;

·         Table: SerializableTable; e

·         Transações: TST e TSTII.

— Bloco de Código 1 —

— Criando o Banco de Dados – DatabaseTableHints —
Create Database DatabaseTableHints
Go

— Acessando o Banco de Dados – DatabaseTableHints
Use DatabaseTableHints
Go

 — Criando a Tabela – SerializableTable —
Create Table SerializableTable
(Codigo Int Identity(1,1) Not Null Primary Key Clustered,
Valores Varchar(30))
Go

Até aqui nada de especial, nosso ambiente já está criado e pronto para receber alguns dados, vamos utilizar o Bloco de Código 2, responsável em realizar o insert e consulta dos dados, conforme apresento a seguir:

— Bloco de Código 2 —
— Inserindo uma pequena porção de dados —
Insert Into  SerializableTable
Values (‘Pedro’), (‘Antonio’), (‘Galvão’), (‘Junior’),
(‘MVP’), (‘MCC’), (‘MSTC’), (‘MIE’), (‘SQL Server’),
(‘Banco de Dados’),(‘Table Hint SerializableTable’)
Go

— Consultando os dados —
Select Codigo, Valores From SerializableTable
Order By Valores Desc
Go

A executarmos o comando Select declarado acima, deveremos ter um result set semelhante ao apresentado na Figura 1 a seguir:

Figura  1 – Processamento do comando Select apresentando os dados inseridos na Table SerializableTable.

Avançando mais um pouco, neste momento temos uma porção de dados armazenados em nossa table SerializabelTable, o que nos permite realizar uma pequena simulação de seu comportamento e entender como a ela realiza o bloqueio em nossa query.

Vamos então realizar a execução do Bloco de Código 3, sendo este o ponto chave que vai nortear nosso entendimento, observe que estamos abrindo um bloco transacional denominado TST (conforme já destacado anteriormente).

— Bloco de Código 3 —
— Iniciando um novo Bloco de Transações denominada TST —
Begin Transaction TST

Observe que estou fazendo uso do comando Begin Transaction abrindo nosso bloco de transação denominado TST, o qual consiste na execução do comando Select em conjunto com table hint Serializable.

Neste instante o Microsoft SQL Server em conjunto com alguns de seus mais importantes componentes: Database Engine e Storage Engine, estabelecem uma nova transação que deverá ser processada dentro da sessão que estamos trabalhando mais que a mesma não recebeu até o presente momento nenhuma instrução Commit ou Rollback.

Select * From SerializableTable With (Serializable)  — Especificando a Table Hint Serializable —
Go
— Forçando um Delay de 10 segundos para gerar bloqueio no nível de leitura compartilhadas  —
WaitFor Delay ’00:00:10′
Go
Importante: O uso do comando WaitFor, vai nos ajudar a ter tempo para abrir uma nova query e executar os próximos passos que deveremos realizar, note que abaixo já estou declarando o comando Commit para confirmar a execução da nossa transação, que na verdade consiste na busca dos linhas de dados existentes na tabela SerializableTable e apresentadas em tela.
Commit Transaction TST
Go
A Figura 2 apresentada abaixo, ilustra o processamento do Bloco de Código 3, o que nos permite identificar a ocorrência do Delay de 10 segundos:
Figura 2 – Processamento do Bloco de Código 3.
Muito bem, agora é a hora da verdade, em paralelo a execução do Bloco de Código 3, vamos executar vamos executar o Bloco de Código 4, o qual vai nos exigir abrir uma nova query dentro da ferramenta que você se encontra acessando o Microsoft SQL Server no momento, eu como de costume estou utilizando o bom e velho Management Studio.

— Bloco de Código 4 —
— Abrir nova query e executar o Select abaixo, após 10 segundos os dados serão apresentados —
Begin Transaction TSTII
Select ‘Aguardando…’ As ‘Passo 1…’
Go

Select GetDate() As ‘Passo 2 – Update Realizado…’
Update SerializableTable
Set Valores = ‘SerializableTable’
Where Codigo = 11
Go
Select GetDate() As ‘Passo 3 – Apresentar dados…’
Go
Select Codigo, Valores From SerializableTable
Where Codigo = 11
Commit Transaction TSTII
Go
Select GetDate() As ‘Transações confirmadas…’
Go
Posso dizer que a execução do Bloco de Código 4, aparentemente foi super tranquilo e simples, mas tenho a certeza que após sua execução você conseguiu entender o funcionamento da table hint Serializable.
A Figura 3 a seguir, apresenta o resultados obtidos através do processamento deste bloco de código:
Figura 3 – Realização do bloco de transação TSTII em paralelo ao TST.
Você pode observar que a partir do momento que nossa primeira transação TST estava sendo processada, a segunda transação TSTII teve seu processamento iniciado, mas ficou aguardando a confirmação de conclusão da TST.
Isso não é fantástico, com certeza é, realmente o uso das table hints em situações ou necessidades específicas pode ser de grande avalia em nossas atividades, mas calma, muita calma neste hora, pois não devemos utilizar nenhum recurso ou funcionalidade sem conhecer melhor seu comportamento, este foi justamente o objetivo principal do post de hoje.

Com isso, e sem mais delongas, chegamos ao final. Foi muito legal poder mostrar um pouco mais sobre as table hints existentes no Microsoft SQL Server, claro de que um pouco de trabalho este post, mas já estou acostume, mesmo assim sempre vale a pena poder compartilhar um o conhecimento e experiências adquiridas ao longo dos anos de trabalho como DBA e Professor.

Espero que você tenha gostado, eu posso dizer que sim, mas sua opinião é muito importante.


Referências

https://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-2017

https://sqlperformance.com/2014/04/t-sql-queries/the-serializable-isolation-level

https://www.techrepublic.com/article/using-advanced-table-hints-in-sql-server/

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

https://pedrogalvaojunior.wordpress.com/2019/02/23/24-para-que-serve/

http://www.verycomputer.com/156_c5e201f3b1bce12f_1.htm

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar um dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2019/02/23/24-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/12/21/23-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/08/22/22-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/05/28/21-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2018/04/12/20-para-que-serve/

 

Conclusão

Mais uma vez podemos observar como o Microsoft SQL Server apresenta um conjunto grandioso de funcionalidades, utilizadas de maneiras diferentes e específicas para cada cenário.

Neste post podemos conhecer, aprender e visualizar como as table hint Serializabel pode ser utilizada, seus comportamento, além disso, entender como uma consulta usa o nível de isolamento SERIALIZABLE ou a table hint HOLDLOCK.

Demonstrei como o Microsfot SQL Server pode aplicar bloqueios compartilhados até que uma transação seja concluída, papel fundamente para qualquer SGBD de alto nível, ainda mais o SQL Server, que possui a capacidade de compreender e permitir que bloqueios ocorram e possam ser feitos durante o processamento de diversas querys ou transações.

Este é o fantástico Microsoft SQL Server, que desde suas primeiras versões nos apresenta inúmeras possibilidades de se aprender, possibilitando usar o passado como fonte de inspiração para construção de um futuro melhor, por isso que a cada dia eu me apaixono ainda mais por este produto…

Vai SQL Server, Vai SQL Server….

Agradecimentos

Mais uma vez obrigado por sua ilustre visita, sinto-me honrado com sua presença, espero que este conteúdo possa lhe ajudar e ser útil em suas atividades profissionais e acadêmicas.

Um forte abraço, até o próximo post da sessão Para que serve a ser publicado no mês agosto de 2019.

Um grande abraço e ótimo final de semana.

Valeu.

Microsoft disponibiliza PWA Builder 2.0


Está no ar a versão 2.0 do PWA Builder, a ferramenta criada pela Microsoft que facilita e muito a criação de um Progressive Web App (PWA).

PWA Builder

A v2.0 possui um novo design e “snippits” para integração de interfaces de programação web, tem ainda a adição de uma plataforma de desktop Mac e Webkit com base em Webkit.

Outra novidade é que os desenvolvedores agora podem visualizar sua “pontuação” e adicionar recursos de plataforma cruzada (cross plataform), como autenticação, integração de sistemas e interfaces de usuário por meio de interfaces de programação do Microsoft Graph.

Não tenha dúvida que uma das principais ideias por trás dessa ferramenta é a geração de novos aplicativo compatíveis com o Windows 10, assim como tem ainda o interesse da MS em estimular desenvolvedores a migrarem seus aplicativos mais antigos para novos formatos, entre os quais estão os PWA.

Já falamos aqui que os PWA serão muito importantes no futuro de toda plataforma e de todo sistema operacional. O futuro que nos aguarda tem a Nuvem como centro de tudo e é lá que os PWA reinam e operam boa parte das aplicações web.

Sendo assim, se você é desenvolvedores, estudante, programador ou entusiastas, vale a pena explorar as possibilidades ofertadas pelo PWA Builder. Tem muita coisas simples de usar, então, vale a pena dar uma fuçada.

Para saber sobre esta nova ferramenta da Microsoft, acesse: https://www.pwabuilder.com/

Fontes e Direitos Autorais: WindowsTeam – https://www.windowsteam.com.br/microsoft-libera-versao-2-0-da-sua-ferramenta-para-criacao-de-pwa/

Microsoft anuncia que Menu Iniciar do Windows será um aplicativo


Segundo o portal brasileiro WindowsTeam, a Microsoft informou recentemente uma grande mudança no Windows 10 a partir da próxima atualização 19H1, na qual o menu iniciar existente no Windows desde a versão 95, passará a ser reconhecida e adotada como um aplicativo customizado e baixado via Windows Store.


Menu Iniciar do Windows 10 agora vai ser um aplicativo

Se tem uma coisa que as pessoas não podem afirmar nos tempos de hoje é que a Microsoft não é uma empresa suscetível a mudanças. Na verdade, hoje, é bem o contrário, pois, desde que o indiano Satya Nadella assumiu a liderança da empresa anos atrás, que não paramos de ver a gigante de Redmond se jogando de cabeça no mar das inovações e das mudanças de paradigmas.

Algumas das mudanças mais íconicas foram: a transformação sofrida pelo Windows, que deixou de ser apenas um software/produto e se tornou um serviço completo; Temos ainda a grande migração dos produtos e serviços da empresa para a Nuvem, e aqui entenda que quando falamos de Nuvem da Microsoft estamos falando de Azure; assistimos de camarote a “abertura” da empresa para receber produtos antes considerados da concorrência, como por exemplo, produtos by Google, como o Android e outros. Não fique surpreso quando não falamos do iOS ou macOS, pois, acredite você ou não, Apple e Microsoft são parceiros das antigas; por fim, temos uma das mais grandiosa mudanças, que foi o forte abraço dado pela Microsoft no mundo Open Source. Eles literalmente abraçaram o mercado dos softwares de código aberto ao ponto de abrirem mão do seu motor de renderização proprietário do Microsoft Edge em prol do Blink, que veio do Projeto Chromium, que é a mesma base do Google Chrome. Tem até várias distriuições Linux dentro da Microsot Store…

Agora, a grande novidade do momento é mais uma inovação para o Windows 10. Eles anunciaram que o Menu Iniciar do sistema operacional vai se tornar um aplicativo em separado, capaz de ser atualizado diretamente pela loja. Ou seja, não será mais necessário aguardar por uma atualização completa do S.O. para ter acesso a novidades nesse Menu, nem para melhorar seu desempenho ou corrigir bugs e erros.

windows 10

O aplicativo se chamará Windows 10 Start e estará disponível a partit da compilação 19H1, que chega agora em maio. A Microsoft confirmou que o Start ainda está próximo do Shell do Windows, mas ele poderá expandir a experiência ainda mais ao se tornar mais independente.

Inclusive, sua desenvolvedora afirma que um dos principais propósitos por trás da criação deste aplicativo em separado é oferecer aos usuários vários benefícios, incluindo aumento de desempenho.

Indiretamente estamos vendo que a ideia também é “modularizar” o sistema, dando independência a aplicativos imporantes, de modo que numa possível versão mais simplificada, como por exemplo, o Windows Lite, se possa trabalhar em separada em cada item do sistema afim de torná-lo mais eficiente. Quem sabe passos como esse nos levam ao Windows CoreOS propriamente dito.

Fontes e Direitos Autorais: WindowsTeam – https://www.windowsteam.com.br/menu-iniciar-do-windows-10-agora-vai-ser-um-aplicativo/

Uma ótima novidade Microsoft Edge agora compatível com o Windows 10 de 32bits


Segundo informações obtidas pelo portal brasileiro WindowsTeam, a próxima versão do Microsoft Edge terá suporte nativa versões do Windows 10 rodando em plataforma 32 bits.


A versão Canary do Microsoft Edge baseado no projeto Chromium foi atualizada para a v. 75.0.133.0. A principal novidade é a chegada do suporte a versões do Windows 10 de 32 bits e baseadas em ARM, além do Windows 7, Windows 8.1 e Mac. E a partir de ontem à noite, a Microsoft finalmente deu o primeiro passo nessa direção.

“Começando com a versão de hoje do Canary (75.0.133.0), você pode agora instalar o preview do Microsoft Edge em 32-bit [PCs]”, tweetou a conta do Microsoft Edge Dev . “Experimente e deixe-nos saber o que você pensa!”

Ontem (18), foi a versão DEV do browser que recebeu seu primeiro update e agora a versão ainda mais experimental foi pra frente com uma novidade que nem nós esperávamos.

Microsoft edge

O update de hoje deixa bem claro que esse novo Edge um dia irá migrar para o Windows 10 no ARM ou mesmo para a Microsoft Store.

Fontes e Direitos: WindowsTeam – https://www.windowsteam.com.br/novo-microsoft-edge-agora-compativel-com-o-windows-10-de-32bits/

Material de Apoio – Abril 2019


Olá, muito bom dia….

Tudo bem? Antes de começar este post, quero lhe perguntar: E ai já se pesou? Anotou na balança ou no seu banco de dados da tabela de pesos o quanto você esta pesando antes da páscoa! KKKK, é minha gente, estamos no mês de abril, a páscoa esta chegando e com ela o coelhinho trazendo muitos docinhos…..

Bom, antes de darmos aquela engordadinha com tantos chocolatinhos, balinhas e docinhos desta doce época do ano, estou de volta cumprindo a minha missão de  colaborar e compartilhar com a comunidade técnica mais um post da sessão Material de Apoio dedicado exclusivamente ao meu blog.

Espero que você esteja gostando 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.

O post de hoje

Seja bem-vindo a mais um post da sessão Material de Apoio, sendo o segundo post da sessão em 2019 e de número 162 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.

Hoje não será diferente, estou trazendo alguns dos mais recentes scripts catalogados nos últimos meses, 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.

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

  • Acessos;
  • Any Constraints;
  • Arquivo XLS;
  • Arquivo MDB;
  • Cálculo de dias úteis;
  • Casas Decimais;
  • Comando Backup Database;
  • Comando Backup Database With Move Option;
  • Comando Declare;
  • Comando Deny;
  • Comando Grant;
  • Comando Insert;
  • Comando OpenDataSource;
  • Comando OpenRowSet;
  • Comando Restore Database;
  • Comando Revoke;
  • Comando Select;
  • Comando Update;
  • Constraints;
  • Create Database;
  • Create Logins;
  • Create Table;
  • Create Users;
  • Declaração de Variáveis;
  • Delete Cascade;
  • Diretiva Set;
  • Drop Table;
  • Exportação de Dados;
  • Função CharIndex;
  • Função DataLength;
  • Função Floor;
  • Função Left;
  • Função Len;
  • Função Right;
  • Gerenciamento de acesso para Banco de Dados e Tabelas;
  • Importação de Dados;
  • Logins;
  • Microsoft Access;
  • Microsoft Excel;
  • Permissões;
  • Schemas;
  • Stored Procedure;
  • Stored Procedure SP_Attach_DB;
  • Stored Procedure SP_Detach_DB;
  • Tipo de Dados Decimal;
  • Tipo de Dados Int;
  • Tipo de Dados Money;
  • Update Cascade; e
  • Users.

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.

Material de Apoio

A seguir apresento a relação de arquivos  selecionados:

1 – Material de Apoio – Abril – 2019 – Comando – Alter Table + Any Constrainst.sql

2 – Material de Apoio – Abril – 2019 – Comando – Alter Table With NoCheck.sql

3 – Material de Apoio – Abril – 2019 – Identificando a quantidade de Casas Decimais.sql

4 – Material de Apoio – Abril – 2019 – Calculando Dias Úteis.sql

5 – Material de Apoio – Abril – 2019 – Realizando o Attach e Detach Database.sql

6 – Material de Apoio – Abril – 2019 – Gerenciando – Acesso para Banco de Dados.sql

7 – Material de Apoio – Abril – 2019 – Gerenciando – Acesso para Tables.sql

8 – Material de Apoio – Abril – 2019 – Stored Procedure P_ImportarBanco.sql

9 – Material de Apoio – Abril – 2019 – OpenDataSource lendo dados em um arquivo XLS.sql

10 – Material de Apoio – Abril – 2019 – Utilizando comando OpenRowSet para importar dados do Microsoft Access.sql

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.

Links

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

https://pedrogalvaojunior.wordpress.com/2018/12/18/material-de-apoio-dezembro-2018/

https://pedrogalvaojunior.wordpress.com/2018/10/30/material-de-apoio-outubro-2018/

https://pedrogalvaojunior.wordpress.com/2018/08/14/material-de-apoio-agosto-2018/

https://pedrogalvaojunior.wordpress.com/2018/06/19/material-de-apoio-junho-2018/

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 no mês de junho, até lá, continue aproveitando cada momento da sua vida, desfrutando com muita sabedoria os momentos de galeria e também os desafios que são colocados ao seu redor.

Um forte abraço, muita saúde, sucesso e nos encontramos em breve.

Valeu.

MVPConf Latam 2019 – Easter Egg – 05 – Last Week…


Salve galera, boa tarde.

Conforme prometido, no período dos dias 01/04 a 10/04, vou compartilhar 04 vouchers com 50% de desconto para o MVPConf Latam 2019, caso você ainda não tenha feito a sua inscrição, faça agora mesmo.

Segue abaixo os vouchers válidos somente para hoje:

Voucher 01 – 04/04

Segue o Voucher EE493B3FE8FD4B7A814EDDE2FD954AC5 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 02 – 04/04

Segue o Voucher 133FF309DF2D4DA99122D8BB5EAA950F com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 03 – 04/04

Segue o Voucher 46E1220149AD46FDA655DBF0E166844E com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 04 – 04/04

Segue o Voucher 9247D709F1EC46FD9E22D76F2CB18436 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Aproveite esta oportunidade de participar do maior evento de tecnologia organizado pela comunidade MVP Brasil.

Abraços, fique ligado nos próximos dias mais vouchers serão disponibilizados.

Até mais. 

MVPConf Latam 2019 – Easter Egg – 04


Salve galera, boa tarde.

Conforme prometido, no período dos dias 01/04 a 10/04, vou compartilhar 04 vouchers com 50% de desconto para o MVPConf Latam 2019, caso você ainda não tenha feito a sua inscrição, faça agora mesmo.

Segue abaixo os vouchers válidos somente para hoje:

Voucher 01 – 04/04

Segue o Voucher 5A4DA8471BA144E68985DCE965C11839 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 02 – 04/04

Segue o Voucher B8DE3A69EAC549BE98CAF41A0E2F3CD3 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 03 – 04/04

Segue o Voucher 0E3E2A22A346470CA2DB079A512D5833 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 04 – 04/04

Segue o Voucher 90DB4D760B534E6F97E748548985109B com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Aproveite esta oportunidade de participar do maior evento de tecnologia organizado pela comunidade MVP Brasil.

Abraços, fique ligado nos próximos dias mais vouchers serão disponibilizados.

Até mais. 

MVPConf Latam 2019 – Easter Egg – 03


Salve galera, boa tarde.

Conforme prometido, no período dos dias 01/04 a 10/04, vou compartilhar 04 vouchers com 50% de desconto para o MVPConf Latam 2019, caso você ainda não tenha feito a sua inscrição, faça agora mesmo.

Segue abaixo os vouchers válidos somente para hoje:

Voucher 01 – 03/04

Segue o Voucher BBDBD841372A4A71AB24FA7C2F62E4FC com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 02 – 03/04

Segue o Voucher 55D6595A29A3445DACB720CDB4B74A40 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 03 – 03/04

Segue o Voucher 18A4EFDEA3974048A8BF703B65A9C1B3 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 04 – 04/04

Segue o Voucher 4FB88484B6FA46568E2E2C6CD59C330F com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Aproveite esta oportunidade de participar do maior evento de tecnologia organizado pela comunidade MVP Brasil.

Abraços, fique ligado nos próximos dias mais vouchers serão disponibilizados.

Até mais. 

MVPConf Latam 2019 – Easter Egg – 02


Salve galera, boa tarde.

Conforme prometido, no período dos dias 01/04 a 10/04, vou compartilhar 04 vouchers com 50% de desconto para o MVPConf Latam 2019, caso você ainda não tenha feito a sua inscrição, faça agora mesmo.

Segue abaixo os vouchers válidos somente para hoje:

Voucher 01 – 02/04

Segue o Voucher 227D030CBC2044C58F14969CC43749B2 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 02 – 02/04

Segue o Voucher B3BA7C59DE944DD9801558B667AADD75 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 03 – 02/04

Segue o Voucher 44EA41AEE0C24AC1B1740BF7A351F233 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 04 – 02/04

Segue o Voucher BBDBD841372A4A71AB24FA7C2F62E4FC com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Aproveite esta oportunidade de participar do maior evento de tecnologia organizado pela comunidade MVP Brasil.

Abraços, fique ligado nos próximos dias mais vouchers serão disponibilizados.

Até mais. 

MVPConf Latam 2019 – Easter Egg – 01


Salve galera, boa tarde.

Conforme prometido, no período dos dias 01/04 a 10/04, vou compartilhar 04 vouchers com 50% de desconto para o MVPConf Latam 2019, caso você ainda não tenha feito a sua inscrição, faça agora mesmo.

Segue abaixo os vouchers válidos somente para hoje:

Voucher 01 – 01/04

Segue o Voucher 5DFF5C3B5604477D815CC572309295EB com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 02 – 01/04

Segue o Voucher 38DC0E68570F4CD6B29BAEB30E518108 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 03 – 01/04

Segue o Voucher 312C097D8B84473E8D551EB356CB0DB9 com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Voucher 04 – 01/04

Segue o Voucher A09AD7FECEF94CAF9A6D2D7294AA253B com 50% de desconto para a compra do ingresso para o MVPConf Latam 2019.

Clique Aqui

Aproveite esta oportunidade de participar do maior evento de tecnologia organizado pela comunidade MVP Brasil.

Abraços, fique ligado nos próximos dias mais vouchers serão disponibilizados.

Até mais. 

SQL Server Management Studio 18.0 Release Candidate 1 liberado


Através do anuncio realizado ontem em seu blog dedicado ao Microsoft SQL Server, o Senior Program Manager – Dinakar Nethi, realizou o anúncio oficial da disponibilidade da primeira versão release candidate do próximo Microsoft SQL Server Management Studio 2018.

O Senior Program Manager: “À medida que nos aproximamos da disponibilidade geral do SQL Server Management Studio (SSMS) 18, decidimos ter uma versão rápida da compilação Release Candidate (RC).”

Melhorias do SQL Server Management Studio

  • Habilitando a conectividade de ponto de extremidade XMLA para DataSets do Power BI: os endpoints XMLA fornecem acesso ao mecanismo do Analysis Services no serviço do Power BI. Isso permite que ferramentas como o SSMS e o SQL Profiler se conectem a conjuntos de fonte do Power BI para monitoramento, gerenciamento e depuração, etc. 
  • SQL Server Management Objects (SMO)
    – Adicionado suporte de exclusão em cascata para “Edge Constraints” no SMO e no SSMS.
    – Adicionado suporte para permissões de classificação de dados “leitura-gravação”.
  • Audit Files
    – Atualizada a lista de ações de auditoria conhecidas para FEATURE RESTRICTION ADD/CHANGE GROUP/DROP.

 

Correções de bugs NO SSMS

  • Corrigido um problema que estava impedindo a autenticação de MFA quando os IDs de usuário pertenciam a vários locatários.
  • Corrigido um problema em que o relatório do painel perf estava relatando as esperas PAGELATCH e PAGEIOLATCH que não podiam ser encontradas em sub-relatórios.
  • Corrigido um problema que resultou em uma exceção de “índice fora do intervalo” ao clicar na grade.
  • Corrigido um problema em que a cor do plano de fundo do resultado da grade estava sendo ignorada. 

Importante

  1. Como de costume, se você estiver utilizando uma versão anterior do SSMS 18.0 Preview, será necessário desinstalá-la primeiro.
  2. O SSMS 18,0 RC1 pode ser instalado lado a lado com o SSMS 17. x para fins de teste.
  3. Como lembrete, o uso do software pre-GA em ambientes de produção não é suportado.

Você pode realizar o download acessando o link: download SSMS 18.0 RC1.

Para maiores informações sobre a relação completa de correções e melhorias, acesse a Release Notes.


Fontes e Direitos  Autorais: Dinakar Nethi – Senior Program Manager, Azure Data – 28/03/2019.
Leia na integra: https://cloudblogs.microsoft.com/sqlserver/2019/03/28/sql-server-management-studio-18-0-release-candidate-1-is-now-available/

Microsoft libera nova preview do SQL Server 2019 denominada 2.4


Ontem a Microsoft através do seu time MSSQLTiger, disponibilizou a nova versão preview da próxima versão do Microsoft SQL Server 2019.

Este novo preview foi batizado de SQL Server 2019 2.4 (quinta versão), vale ressaltar que nos últimos meses a Microsoft vem trabalhando fortemente para liberação de novas versões preliminares.

Novidades

Um dos destaques desta nova versão preliminar faz referência a integração do SQL Server com o Apache Spark™ e o HDFS com o SQL Server, criando assim  uma nova plataforma de dados unificada, que possibilita um grande salto no produto relacionado com os novos padrões de dados e processamento em larga escala.

Segundo informações fornecidas pela Microsoft, o SQL Server 2019 oferece mais segurança, disponibilidade e desempenho para todas as cargas de dados, além de trazer novas ferramentas de conformidade (relacionadas a GDPR e LGPD), melhor desempenho em hardware moderno e alta disponibilidade em Windows, Linux e contêineres.

A Figura 1 abaixo ilustra a página inicial do website da Microsoft dedicado ao Microsoft SQL Server 2019:

Figura 1 – Introdução ao Microsoft SQL Server 2019.

Melhorias

Esta versão inclui melhorias de versões CTP anteriores para corrigir bugs, melhorar a segurança e otimizar o desempenho.

Além disso, os seguintes recursos são adicionados ou aprimorados para SQL Server 2019 pré-visualização CTP 2.4:

    • Cluster de grande volume de dados
      • Orientação na GPU suporte para a execução de profunda aprendizagem com TensorFlow no Spark.
      • Atualização em tempo real para Spark 2.4.
    • Mecanismo de banco de dados
      • Novo evento estendido.query_post_execution_plan_profile
      • Nova DMF retorna o equivalente o último plano de execução real conhecido para a maioria das consultas.sys.dm_exec_query_plan_stats
      • Criptografia de dados transparente (TDE) varredura – suspender e continuar.
    • SQL Server Analysis Services
      • Relacionamentos muitos-para-muitos em modelos tabulares.
      • Configurações de propriedade para a gerenciamento de recursos.

Download

Dentre as opções disponíveis, você poderá optar tanto para rodar em ambientes físicos como Windows e Linux ou virtualizados através de máquinas virtuais ou containers, conforme Figura 2 abaixo ilustra:

Figura 2 – Plataformas para download disponíveis para versão 2.3 do Microsoft SQL Server 2019.

O Microsoft Server 2019 Preview 2.4 para Windows está disponível em arquivos ISO, arquivo .cab para os seguintes idiomas:

  • Inglês;
  • Alemão;
  • Japonês;
  • Espanhol;
  • Coreano;
  • Russo;
  • Italiano;
  • Francês;
  • Chinês (simplificado);
  • Chinês (tradicional); e
  • Português (Brasil)‎.

Saiba mais sobre o SQL Server 2019

Caso você queria saber mais sobre esta nova versão do Microsoft SQL Server e seus principais recursos, selecione um dos links abaixo:

https://info.microsoft.com/ww-landing-SQLDB-Microsoft-SQL-Server-WhitePaper.html

http://download.microsoft.com/download/8/B/6/8B643729-6224-4ECC-8C50-3292B8156F0E/SQL_Server_2019_Transform-Data_into_Insights_Infographic_EN_US.pdf

http://download.microsoft.com/download/D/2/5/D2519504-0ACD-4CD7-9C34-AB85D5824F34/SQL_Server_2019_Top_10_Reasons_to_Choose_Infographic_EN_US.pdf

https://info.microsoft.com/ww-landing-intro-sql-server-2019.html

Fontes e Direitos Autorais: Microsoft.com – SQL Server BlogSQL Server Team – 27/03/2019.
Leia na integra acessando: https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-ver15?view=sql-server-ver15#ctp-24

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

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

MFE

 

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

CASA

ACSA ASCA ASAC SCAA

CSAA

AASC AACS CAAS SAAC SACA

ACAS

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:

Cenário

Média de Uso de CPU Média do Uso de Memória em GBs Média de Uso de Disco Rígido Tempo Mínimo de processamento

Tempo Máximo de processamento

01 57% 3.5 Gbs 65% 19 Hrs e 23 segundos 21Hrs e 18 segundos
02 34% 2.8 Gbs 42% 33 minutos e 6 segundos 42 minutos e 27 segundos
03 18% 2.0 Gbs 24% 6 minutos e 13 segundos 10 minutos e 25 segundos

Tabela 1 – Resumo comparativo do uso de CPU, Memória e Disco, 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.