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

Conheça o Intelligent Query Processing uma nova abordagem de reconhecimento e processamento de recursos adicionada ao SQL Server a partir da versão 2019, em especial neste post a Scalar UDF Inlining.


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.

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

Material de Apoio – Abril 2020

Material de Apoio número 167….


Bom dia, bom dia, bom dia…

Seja bem-vindo a mais um post da sessão Material de Apoio.

Como tem passou estes dias desde o nosso último post? Tenho a noção que não esta sendo fácil aguentar esta quarentena, não é mesmo! Todavia é o melhor que podemos fazer, ficar em casa nos cuidando e principalmente evitando que esta doença possa se espalhar ainda mais.

Pensando neste atual cenário, estou mais uma vez aqui no meu blog, neste sábado dia 18/04, o qual representa o meu 34º (Trigéssimo quarto) dia de quarentena, com o objetivo de empenhar-se para encontrar uma maneira de lhe auxiliar a passar o tempo, em adicional propor uma forma de renovar o seu conhecer.

Introdução

Você vai encontrar em cada post desta sessão 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 ai que pensei em adicionar uma imagem, figura ou símbolo que traga uma certa lembrança mais rápido e fácil ao visitante.

Para o post de hoje, nada mais coerente do que adicionar uma que representa a quarentena que estamos vivendo, a qual seria o símbolo que identificada o risco de morte,  denominada Figura 1 apresentada a seguir:

Image result for quarentenaFigura 1 – Simbolo que representa conteúdo compartilhado no post 167.

O post de hoje

Representa o primeiro post desta sessão no ano de 2020 e de número 167 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:

° Anexar arquivos;
° Banco de Dados;
° Cálculo de Juros;
° Cláusula From;
° Cláusula Order By;
° Cláusula Where;
° Comando Begin;
° Comando Begin Try;
° Comando Close;
° Comando Create Procedure;
° Comando Deallocate;
° Comando Declare;
° Comando Delete;
° Comando End Try;
° Comando Exec;
° Comando Fetch Next;
° Comando Insert;
° Comando Print;
° Comando Return;
° Comando Select;
° Comando Top;
° Comando Update;
° Comando Use;
° Cursor;
° Dias de Atraso;
° Diretiva Set NoCount;
° Extended Stored Procedure;
° Information_Schema;
° INFORMATION_SCHEMA.TABLES;
° Junções Inner Join;
° Nome de Colunas;
° Nome de Tabelas;
° Operador Lógico Condicional And;
° Operador Lógico Condicional IF;
° Operador Lógico Condicional Or;
° Operador Lógico Condicional While;
° Parcelas;
° SP_ExecuteSQL;
° System Function Concat();
° System Function DatabasePropertyEx();
° System Function IsNull;
° System Function Lower();
° System Function RTrim();
° System Stored Procedure;
° System Stored Procedure SP_Attach_Single_File_DB;
° Tipo de Dados NVarchar();
° Variáveis;
° Visão de Sistema Sys.Databases; e
° XP_CMDShell.

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

1 – Material de Apoio – Abril 2020 – Simulando a Somatória entre Data e Hora entre Compatibility_Levels diferentes.sql

2 – Material de Apoio – Abril 2020 – Identificando o horário de inicialização do Sistema Operacional.sql

3 – Material de Apoio – Abril 2020 – Simulando movimentação de estoque de acordo com o código e indicador de movimentação.sql

4 – Material de Apoio – Abril 2020 – Trazendo o nome da tabela armazenada na Information_Schema + Colunas.sql

5 – Material de Apoio – Abril 2020 – Anexando diversos arquivos de bancos de dados via linha de comando.sql

6 – Material de Apoio – Abril 2020 – Calculando o Juros Percentual com base na quantidade de dias de atraso.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/2019/12/20/material-de-apoio-dezembro-2019/

https://pedrogalvaojunior.wordpress.com/2019/10/16/material-de-apoio-outubro-2019/

https://pedrogalvaojunior.wordpress.com/2019/08/20/material-de-apoio-agosto-2019/

https://pedrogalvaojunior.wordpress.com/2019/06/25/material-de-apoio-junho-2019/


Feedback

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, 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 no mês de junho de 2020.

Fique em casa, neste momento é o melhor que podemos fazer, continue aproveitando cada momento da sua vida, desfrutando com muita sabedoria, galeria e esperança.

Até mais.

#28 – Para que serve

Utilizando o operador relacional Pivot em combinação com querys dinâmicas, funções Stuff(), String_Agg() e muito mais…..


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.

Continue Lendo “#28 – Para que serve”

Short Scripts – Fevereiro 2020

Neste primeiro post de 2020 da sessão Short Scripts, você vai encontrar 16 exemplos diferentes de como podemos criar em tempo de execução sequências numéricas de números inteiros.


Olá bom dia, como vai?

Seja bem-vindo, em mais um post da sessão Short Scripts, parece que foi então o último post publicado desta sessão e foi mesmo, já estamos em 2020.

Da mesma forma que post anterior publicado em 2019, este primeiro post dedicado ao Short Script também esta ocorrendo entre a madrugada do dia 04/02 e 05/02, as férias acabaram e com ela a volta ao batendo já se iniciou.

Mesmo com este horário meio fora do comum,são exatamente 00:25, isso mesmo, madrugada como já destaquei, que o post de número 40 desta tradicional sessão começa a sair do forno.

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 neste madrugada, feita no encerramento do post anterior publicado no mês de novembro em 2019, 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……..

O post de hoje

Para este post, não vou exatamente compartilhar um conjunto variado de scripts que foram catalogados nos últimos meses, ao contrário, vou disponibilizar um conteúdo que foi elaborado hoje, dedicado de forma única e exclusiva a demonstrar como podemos criar de diversas formas uma sequência numérica de números no Microsoft SQL Server, através de um mix de técnicas mais antigas em conjunto com funcionalidades e atuais.

Em conjunto com a sequência numérica, os exemplos de código aqui compartilhados se relacionam com os seguintes assuntos:

● Cláusula Where;
● Comando Begin;
● Comando Begin Transaction;
● Comando Case;
● Comando Commit Transaction;
● Comando Create Function;
● Comando Create Procedure;
● Comando Create Table;
● Comando Declare;
● Comando Distinct;
● Comando End;
● Comando Insert;
● Comando Insert;
● Comando Order By;
● Comando Select;
● Comando While;
● CTE;
● CTE Recursiva;
● Cursor;
● DataType Int;
● Declaração de Variáveis;
● Default Values;
● Diretiva Set;
● Diretiva Set NoCount;
● Função Concat();
● Função Try_Convert();
● Function;
● Junção Direta;
● Números Inteiros;
● Opção Identity();
● Operador Cross Join;
● Operadores compostos;
● Select Derivada;
● Select Values;
● Stored Procedure; e
● Subquery.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Fevereiro 2020. Vale ressaltar que todos os scripts publicados nesta sessão foram devidamente testados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, vale sim todo cuidado possível para evitar maiores problemas.

Fique à vontade para compartilhar, comentar e melhorar cada um destes códigos.


Short Scripts

— Exemplo 1 — While —
Set NoCount On
Go

Declare @NumeroInicial Int=1, @NumeroFinal Int=100

While @NumeroInicial <= @NumeroFinal
Begin

Select @NumeroInicial As Numeracao

Set @NumeroInicial +=1
End
Go

— Exemplo 2 — Insert Into Default Values + Go com número de recursividade —
Create Table TabelaNumeracao
(Numero Int Identity(0,2))

Insert Into TabelaNumeracao Default Values
Go 1000

Select * From TabelaNumeracao
Go

— Exemplo 3 — Cursor —
Declare @Contador Int=0, @NumeroAtual Int=0

Declare Cursor_Numeracao Cursor For
Select * From TabelaNumeracao
Order By Numero Desc

Open Cursor_Numeracao
While @Contador <= (Select Max(Numero) From TabelaNumeracao)
Begin

Fetch Next From Cursor_Numeracao
Into @NumeroAtual

Print Concat(‘O número atual é: ‘, @NumeroAtual)

Set @Contador +=2

End
Go

Close Cursor_Numeracao
Deallocate Cursor_Numeracao
Go

— Exemplo 4 — CTE Recursiva —
Declare @NumeroInicial Int=1, @NumeroFinal Int=100

;With CTENumeracaoSequencial (Numeracao)
As
(Select @NumeroInicial As Numero
Union All
Select 1+Numeracao As NumeroSequencial From CTENumeracaoSequencial
Where Numeracao < @NumeroFinal)

Select * From CTENumeracaoSequencial
Go

— Exemplo 5 — Multíplas CTE Recursivas —
;WITH CTEUm
As
(Select 1 As Um Union ALL SELECT 1)
,CTEUnidade
As
(Select 1 As Unidade From CTEUm C1, CTEUm C2)
,CTEDezena
As
(Select 1 As Dezena From CTEUnidade C1, CTEUnidade C2)
,CTECentena
As
(Select 1 As Centena From CTEDezena C1, CTEDezena C2)
,CTEMilhar
As
(Select 1 As Milhar From CTECentena C1, CTECentena C2)
,Numeracao
As
(Select ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as Numeracao From CTEMilhar)
Select * From Numeracao
Go

— Exemplo 6 — CTE com Operador de Junção Cross Join —
;With CTENumeracao (Numero)
As
(
Select * From
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoUnidade (NumeroUnidade)
)
Select Unidade.Numero+Dezena.Numero*10+Centena.Numero*100+Milhar.Numero*1000 As Numero
From CTENumeracao Unidade
Cross Join CTENumeracao Dezena
Cross Join CTENumeracao Centena
Cross Join CTENumeracao Milhar
Order By Numero
Go

— Exemplo 7 — CTE com Junção Cruzada Direta —
;With CTENumeracao (Numero)
As
(
Select * From
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoUnidade (NumeroUnidade)
)
Select Unidade.Numero+Dezena.Numero*10+Centena.Numero*100+Milhar.Numero*1000 As Numero
From CTENumeracao Unidade, CTENumeracao Dezena, CTENumeracao Centena, CTENumeracao Milhar
Order By Numero
Go

— Exemplo 8 — Objeto Sequence —
Create Sequence dbo.Numeracao As Int
Start With 1
Increment By 1
MinValue 1
MaxValue 5000
Cycle
Go

Select Next Value For dbo.Numeracao As NumeroLinha, Numero From TabelaNumeracao
Go

Alter Sequence dbo.Numeracao
Restart With 1
Go

— Exemplo 9 — Select com Função Row_Number() —
Select Row_Number() Over (Order By Numero) NumeroLinha,
Numero
From TabelaNumeracao
Go

— Exemplo 10 — Stored Procedure —
Truncate Table TabelaNumeracao
Go

Create Or Alter Procedure P_NumeracaoSequencial @NumeracaoSequencial Int
As
Set NoCount On

Declare @Contador Int=1

While @Contador <= @NumeracaoSequencial
Begin
Begin Transaction

Insert Into TabelaNumeracao With (TabLockX) Default Values

Commit Transaction

Set @Contador += 2
End
Go

— Executando —
Execute P_NumeracaoSequencial 100
Go

Select * From TabelaNumeracao
Go

— Exemplo 11 — User Defined Function —
Create Or Alter Function F_SequencialNumerica (@Numero Int=0)
Returns Table
Return
Select Unidade+Dezena*10+Centena*100+Milhar*1000 AS Numeracao From
(Select 0 AS Unidade Union Select 1 Union Select 2 Union Select 3 Union Select 4
Union Select 5 Union Select 6 Union Select 7 Union Select 8 Union Select 9) SequenciaUnidade,
(Select 0 AS Dezena Union Select 1 Union Select 2 Union Select 3 Union Select 4
Union Select 5 Union Select 6 Union Select 7 Union Select 8 Union Select 9 ) SequenciaDezena,
(Select 0 AS Centena Union Select 1 Union Select 2 Union Select 3 Union Select 4
Union Select 5 Union Select 6 Union Select 7 Union Select 8 Union Select 9 ) SequenciaCentena,
(Select 0 AS Milhar Union Select 1 Union Select 2 Union Select 3 Union Select 4
Union Select 5 Union Select 6 Union Select 7 Union Select 8 Union Select 9 ) SequenciaMilhar
Go

— Executando —
Select * From F_SequencialNumerica(0)
Where Numeracao=15
Go

— Exemplo 12 — Select … Values com Função Concat() e Operador de Junção Cross Join —
Select CONCAT(NumeroUnidade,NumeroDezena,NumeroCentena, NumeroMilhar) As ‘Caractere’,
(NumeroUnidade+NumeroDezena*10+NumeroCentena*100+NumeroMilhar*1000) As ‘Numerico’
From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoUnidade (NumeroUnidade)
Cross Join (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoDezena (NumeroDezena)
Cross Join (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoCentena (NumeroCentena)
Cross Join (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoMilhar (NumeroMilhar)
Order By ‘Numerico’
Go

— Exemplo 13 — Select … Values com Função Concat() e Junção Cruzada Direta —
Select CONCAT(NumeroUnidade,NumeroDezena,NumeroCentena, NumeroMilhar) As ‘Caractere’,
(NumeroUnidade+NumeroDezena*10+NumeroCentena*100+NumeroMilhar*1000) As ‘Numerico’
From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoUnidade (NumeroUnidade),
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoDezena (NumeroDezena),
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoCentena (NumeroCentena),
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoMilhar (NumeroMilhar)
Order By Numerico
Go

— Exemplo 14 — Select … Values com Funções Try_Convert() e Concat() com Junção Cruzada Direta —
Select Try_Convert(Int, CONCAT(NumeroUnidade,NumeroDezena,NumeroCentena, NumeroMilhar),0) As ‘Numerico’
From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoUnidade (NumeroUnidade),
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoDezena (NumeroDezena),
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoCentena (NumeroCentena),
(Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As NumeracaoMilhar (NumeroMilhar)
Order By Numerico
Go

— Exemplo 15 — Select Tabela Derivada com Subquery Select … Values —
Select NumeroUnidade+NumeroDezena*10+NumeroCentena*100+NumeroMilhar*1000 As Numero
From
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroUnidade)) As Unidade,
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroDezena)) As Dezena,
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroCentena)) As Centena,
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroMilhar)) As Milhar
Order By Numero
Go

— Exemplo 16 — Select Tabela Derivada com Função Convert() em conjunto com Select Tabela Derivada mais Subquery Select … Values —
Select Convert(Int, Numero) As Numero From
(
Select CONCAT(NumeroUnidade,NumeroDezena,NumeroCentena, NumeroMilhar) As Numero
From
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroUnidade)) As Unidade,
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroDezena)) As Dezena,
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroCentena)) As Centena,
(Select * From (Values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) As Numeracao (NumeroMilhar)) As Milhar
) As Numeracao
Where Numero>0
Order By Numero
Go


Muito bem, missão mais que cumprida!

Uma nova relação de short scripts acaba de ser compartilhada, mesmo sendo denominados shorts entre aspas “curtos ou pequenos”, posso garantir que todos estes exemplos são de grande importância, apresentam um valor e conhecimento do mais alto nível.

Chegamos ao final de mais um Short Scripts, espero que este material possa lhe ajudar, ilustrando o uso de alguns recursos e funcionalidades do Microsoft SQL Server.

Acredito que você tenha observado que estes códigos são conhecidos em meu blog, todos estão relacionados aos posts dedicados ao Microsoft SQL Server publicados no decorrer dos últimos anos.

Boa parte deste material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso.

Links

Caso você queira acessar os últimos posts desta sessão, não perca tempo acesse os links listados abaixo:

https://pedrogalvaojunior.wordpress.com/2019/11/15/short-scripts-novembro-2019/

https://pedrogalvaojunior.wordpress.com/2019/09/11/short-scripts-setembro-2019/

https://pedrogalvaojunior.wordpress.com/2019/06/08/short-scripts-junho-2019/

https://pedrogalvaojunior.wordpress.com/2019/03/15/short-scripts-marco-2019/

https://pedrogalvaojunior.wordpress.com/2018/11/20/short-scripts-novembro-2018/

Agradecimento

Obrigado mais uma vez por sua visita, fico honrado com sua ilustre presença ao meu blog, desejo e espero que você possa ter encontrado algo que lhe ajudou.

Volte sempre, nos encontraremos mais uma vez na sessão Short Scripts no post a ser publicado no mês de abril em 2020.

Um forte abraço, saúde e paz.

Até mais.

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().

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

Material de Apoio – Dezembro 2019

Material de Apoio número 166….


Muito boa tarde…..

Seja bem-vindo a mais um post da sessão Material de Apoio.

Como tem passou estes dias desde o nosso último post? Eu acredito que esteja tudo bem, pois não faz tanto tempo assim desde o nosso último encontro aqui no meu blog.

Introdução

Você vai encontrar em cada post desta sessão 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 ai que pensei em adicionar uma imagem, figura ou símbolo que traga uma certa lembrança mais rápido e fácil ao visitante.

Para o post de hoje, nada mais coerente que do adicionar a imagem de uma árvore como símbolo, a qual seria um Pinheiro, denominada Figura 1 apresentada a seguir:

Image result for árvore pinheiroFigura 1 – Simbolo que representa conteúdo compartilhado no post 166.

O post de hoje

Representa o que encerra esta sessão no ano de 2019 e de número 166 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:

◦ Backup Database;
◦ Comando Alter Database;
◦ Comando Begin Transaction;
◦ Comando Checkpoint;
◦ Comando Commit Transaction;
◦ Comando Create Clustered Index;
◦ Comando Create Table;
◦ Comando DBCC CheckDB;
◦ Comando Declare;
◦ Comando Insert;
◦ Comando RollBack Transaction;
◦ Comando Select;
◦ Comando ShutDown;
◦ Comando Update;
◦ Comando Use;
◦ Comando While;
◦ Corromper Páginas de Dados;
◦ Criar Banco de Dados;
◦ Database Recovery Model;
◦ Database Status Emergency;
◦ Database UserAcess;
◦ Database Version;
◦ DataType BigInt;
◦ DataType Varchar();
◦ Diretiva Set NoCount;
◦ Falha em Ambiente de Banco de Dados;
◦ Index Clustered;
◦ Restaurar Páginas de Dados;
◦ Restore Database;
◦ System Function DATABASEPROPERTYEX();
◦ System Stored Procedure SP_Attach_DB;
◦ System Stored Procedure SP_DBOption; e
◦ System Stored Procedure SP_Detach_DB.

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

1 – Material de Apoio – Dezembro 2019 – Simulando como Corromper e Restaurar Páginas de Dados.sql

2 – Material de Apoio – Dezembro 2019 – Recuperação de Dados – Criando o Banco de Dados.sql

3 – Material de Apoio – Dezembro 2019 – Recuperação de Dados – Restauração de Backups e Recuperação do Banco de Dados.sql

4 – Material de Apoio – Dezembro 2019 – Recuperação de Dados – Simulando a Falha no Ambiente – Database – Status – Emergency.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/2019/10/16/material-de-apoio-outubro-2019/

https://pedrogalvaojunior.wordpress.com/2019/08/20/material-de-apoio-agosto-2019/

https://pedrogalvaojunior.wordpress.com/2019/06/25/material-de-apoio-junho-2019/

https://pedrogalvaojunior.wordpress.com/2019/04/17/material-de-apoio-abril-2019/


Feedback

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, 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 no mês de fevereiro de 2020.  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, Feliz Natal e Próspero Ano Novo.

Obrigado.

Script Challenge – 2019 – Post 16


Olá, bom dia amantes de banco de dados…

Tudo bem? Nossa como o tempo esta passando, como você sabe a cada quatro meses nos encontramos em mais um post dedicado especialmente a sessão Script Challenge.

Hoje sabado dia 26/10 a primavera chegou a alguns dias, mas continuamos sofrendo muito com este forte calor,  pode até parecer coincidência mas o post anterior publicado no mês de fevereiro desta sessão também foi iniciado falando do calor. O ano de 2019 esta terminando da mesma forma que começou: Sol forte, Ventos quentes e Temperaturas altas para os padrões nacionais, em especial para minha “grande” São Roque (kkkkk……)

O post de hoje não esta relacionado com as mudanças de temperatura do nosso clima, muito menos com o calor, chuva, ao contrário, ele vai tentar lhe ajudar a identificar possíveis situações que começam a ser apresentadas em nosso ambiente decorrentes de mudança rápida, totalmente inesperada, algo que ocorre em poucos minutos que poderá provocar um estrago, isso é muito comum de acontecer. Não é mesmo?

Pense então, nas situações relacionados ao seu ambiente de banco de dados que em poucos minutos começa a se comportar de forma totalmente desconhecida, é a mesma coisa que sair para dar uma volta e começar a chover e você não tem um guarda-chuva, e ai que fazer, como identificar esta mudança ou o que pode ter provocado isso, mas principalmente a partir de qual momento esse comportamento diferente teve início.

Introdução

Os posts publicados nesta sessão tem o objetivo de desafiar o visitante a descobrir o que um determinado script pode fazer ao ser executado, e não somente isso, mostrar como podemos aprender com o uso da linguagem Transact-SQL e sua vasta coleção de comandos, funções e instruções adicionadas a cada nova versão ou atualização do Microsoft SQL Server.

Se você ainda não conhecia a sessão Script Challenge, fique tranquilo vai ter a possibilidade agora mesmo, como também a cada 4 meses poder desfrutar de um novo desafio e sua respectiva resposta, por isso esta sessão é denominada Script Challenge(Script Desafio ou Desafio do Script), bom a melhor forma de traduzir eu deixo para você escolher.

Seguindo um frente….

Gostaria de destacar mais uma vez duas mudanças iniciais implementadas na sessão Script Challenge tendo como base o post publicado em outubro de 2017, sendo elas:

  1. Como maneira ou forma de dificultar ainda mais o nível de complexidade do código, o bloco de código que representa o Script Challenge selecionado para compor o post será  apresentado no formato de imagem ou figura; e
  2. Algumas partes das linhas de código, trechos, ou partes de código serão omitidas, justamente como forma de tornar este código ainda mais desafiador.

Antes de destacar o script de hoje, não custa nada saber um pouco mais sobre esta sessão, por este motivo, quero lhe contar um pouco da história que cerca os posts relacionadas a ela…

Um pouco de História

Esta é uma sessão criado no final do ano de 2010 e mantida mensalmente até meados de 2012, desde então não me dediquei mais a mesma devido principalmente em não conseguir identificar possíveis scripts dentro da minha biblioteca que poderiam ser apresentados como um scripts considerados como desafio para os profissionais da área de banco de dados.

Mas acredito que nos últimos anos com o crescimento do Microsoft SQL Server, seu nível de evolução, amadurecimento e recursos adicionais, como também, meu nível de experiência profissional e acadêmica também evolui muito, sinto-me preparado para retornar com esta sessão e poder de forma bastante técnica, didática e conceitual poder lançar um “desafio” e responder o mesmo com muito segurança.

Outro detalhe importante, esta é uma sessão que foi criada, pensando em apresentar pequenos blocos de códigos oriundos da linguagem Transact-SQL que possam apresentar um nível de dificuldade e conhecimento técnico um pouco mais elevado, exigindo assim uma análise mais profunda e até mesmo a criação um pequeno cenário de teste para seu entendimento.

Vamos então conhecer o bloco de código selecionado para ser o Script Challenge deste post.


Script Challenge – 16

O bloco de código Transact-SQL selecionado para fazer parte do Script Challenge de hoje, esta relacionado com uma importante atividade exercida por Administradores de Servidores, DBAs e Administradores de Banco de Dados.

Trata-se de algo que pode ajudar a identificar possíveis situações que venham a atrapalhar o processamento e execução de nossas querys e transações. Ao contrário do Script Challenge 15, este script possui a finalidade de apresentar os custos de processamento que estão sendo demandados pelos processos em execução relacionados diretamente com o Microsoft SQL Server.

Não deveria, mas vou lhe ajudar, apresentando duas dicas sobre este desafio

  1. O mesmo, pode ser executado em conjunto com as demais sessões, transações ou querys em execução, sem necessitar que qualquer procedimento de manutenção ou alterações na configuração do SQL Server para sua execução, como também, esta totalmente relacionado com o que venha ou possa estar sendo processado pelo sistema operacional que necessite de dados do SQL Server naquele exato momento; e
  2. Preste atenção na relação de tags que estão compartilhadas, nelas você poderá encontrar as partes omitidas do bloco de código, bem como, a resposta para a enquente apresentado no final do post.

E ai, ficou curioso para saber o que este script realiza? Qual seria a sua atividade? O conjunto de resultados que ele retornaria? Pois bem, foi fazer o papel de chato, a resposta para estes e outras demais questões não serão apresentadas hoje (hahahahahahaha……), vou deixar com que você quebre um pouco a sua cabeça, afim de tentar matar esta curiosidade, no final do post como de costume você terá a sua disposição uma enquete que lhe permitirá expor tentar encontrar a resposta para este desafio.

A seguir apresento o bloco de código:


Figura 1 – Short Script 16.

Muito bem, nosso Script Challenge esta apresentado. Você preparado para mais este desafio?

Tenho a certeza que sim!


Sua participação

Legal, agora quero conter com a sua participação, me ajudando a responder este post, outra grande novidade que estou adicionando aos posts da sessão Script Challenge será uma pequena enquete com possíveis respostas para identificar qual é a correta, relacionada com o desafio apresentado através do bloco de código selecionado para este post, desta forma, apresento a seguir a Enquete – Script Challenge – 16 e suas alternativas de resposta:

Seguindo em frente, já conhecemos o Script Challenge selecionado, sua enquete e relação de opções de resposta, fica faltando somente a sua participação, algo que eu tenho a certeza que vai acontecer rapidamente.

Durante quanto tempo posso participar…

Outra grande mudança na sessão Script Challenge é seu tempo de publicação “validade”, anteriormente os posts desta sessão eram publicados mensalmente ou bimestralmente, agora serão publicados em um período mais longo, ou seja, a cada 4 meses estarei compartilhando com vocês novos posts dedicados exclusivamente para esta sessão.

Desta forma, você terá mais tempo para participar e me ajudar e encontrar a resposta correta para este desafio, enviando suas possíveis sugestões, críticas e até mesmo alternativas de resposta para minha enquete.

Posts anteriores

Caso esta seja a primeira vez que você acessa um post desta sessão, fico muito feliz e aproveito para compartilhar os posts mais recentes:

https://pedrogalvaojunior.wordpress.com/2019/06/26/script-challenge-15-a-resposta/

https://pedrogalvaojunior.wordpress.com/2019/02/13/script-challenge-2019-post-15/

https://pedrogalvaojunior.wordpress.com/2018/10/06/script-challenge-14-a-resposta/

https://pedrogalvaojunior.wordpress.com/2018/06/29/script-challenge-2018-post-14/


Agradecimentos

Obrigado por sua visita, espero que post apresentado como um possível “desafio” possa ser úteis e ao mesmo tempo prover conhecimento, aprendizado ou mostrar recursos e problemas existentes no Microsoft SQL Server que as vezes parecem não ter uma resposta, tratados com “bichos de sete cabeças”.

Um forte abraço nos encontramos em breve nas demais sessões, e especialmente em fevereiro de 2020 em mais um post da sessão Script Challenge, o qual apresentará a resposta para este post.

Fique a vontade para conhecer demais post publicados até o presente momento em todas as sessões do meu blog.

Tenha um ótimo final de semana.

Abraços.