Short Scripts – Maio 2020

Neste segundo post de 2020 da sessão Short Scripts, você vai encontrar 7 exemplos diferentes de como podemos utilizar as Extended Stored Procedures (XPs), algumas não documentadas no Microsoft SQL Server.


Olá boa tarde, como vai?

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

Espero que você e seus familiares se encontrem bem neste momento terrível que estamos vivendo em todo Mundo.

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

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de fevereira em 2010, 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 utilizar as chamadas Extended Stored Procedures no Microsoft SQL Server.

Em conjunto com o uso de forma de execução da Extended Stored Procedure, os exemplos de código aqui compartilhados se relacionam com os seguintes assuntos:

● Cláusula From;
● Cláusula Where;
● Comando Alter Table;
● Comando Begin;
● Comando Begin;
● Comando Create Procedure;
● Comando Create Table;
● Comando Declare;
● Comando Exec;
● Comando Execute;
● Comando Go;
● Comando Insert;
● Comando Reconfigure;
● Comando Select;
● Comando Set;
● Comando Union;
● Comando Update;
● Comando Use;
● DataType Char();
● DataType Datetime;
● DataType Decimal();
● DataType Varchar();
● Diretiva Set;
● Extended Stored Procedure XP_CMDShell;
● Extended Stored Procedure XP_ExecResult;
● Extended Stored Procedure XP_FixedDrives;
● Extended Stored Procedure XP_ReadErrorLog;
● Extended XP_Delete_File;
● Função Convert();
● Função DataLength();
● Função DateAdd();
● Função GetDate();
● System Stored Procedure SP_Configure;
● System Stored Procedure SP_Help; e
● Variáveis.
 

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Maio 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 — Identificando a porta Padrão do Microsoft SQL Server através da XP_ReadErrorLog —
Use Master
Go

Exec XP_readerrorlog 0, 1, N’Server is listening on’
Go

— Exemplo 2 — Habilitando a Extended Stored Procedure XP_CMDShell -utilizand a Sigla DSH —

— Ativando a exibição das configurações avançadas —
EXECUTE sys.sp_configure @configname = ‘show advanced options’,@configvalue = 1
Go

— Aplicando a alteração —
Reconfigure
Go

— Ativando para uso da XP_CMDShell —
EXECUTE sys.sp_configure @configname = ‘dsh’,@configvalue = 1
Go

— Aplicando a alteração —
Reconfigure
Go

Observação: Como você deve ter percebido, para se fazer uso da Extended Stored Procedure XP_CMDShell, que por padrão vem desabilitada nas configurações internas do SQL Server, temos a necessidade de ativar a exibição das configurações avançadas da nossa instância ou servidor, utilizando a System Stored Procedure SP_Configure, e posteriormente ativar da XP_ CMDShell.

Caso queira saber mais sobre este recurso e demais configurações existentes, acesse:

— Exemplo 3 — Obtendo a quantidade de Megabytes livres em disco através da XP_FixedDrives
Exec xp_fixeddrives
Go

— Exemplo 4 — Excluíndo arquivos específicos através da XP_DeleteFile
Declare @DateString CHAR(10)
Set @DateString = CONVERT(CHAR(10), DATEADD(d, -2, GETDATE()), 103)

Execute master.dbo.xp_delete_file 0, N’E:\MSSQL2012-Backup\BaanModelEA’,N’bak’, @DateString, 1
Go

— Exemplo 5 — Importando o conteúdo de arquivos .csv para dentro de uma tabela através da XP_CMDShell
CREATE TABLE Test
(Empid varchar(6),
Empname varchar(100),
BirthDate datetime,
Salary decimal(12,2),
Nome Varchar(2000))
Go

INSERT INTO Test
SELECT ‘EMP001′,’Suresh’,’19910619′,3000,’Pedro Galvão’
UNION ALL
SELECT ‘EMP002′,’Ramesh’,’19710103′,20000,’Teste’
UNION ALL
SELECT ‘EMP003′,’Nilesh’,’19800722′,4760,”
UNION ALL
SELECT ‘EMP004′,’Kumar’,’19680911′,42000,”
Go

Declare @Comando Varchar(500)
Set @Comando=’bcp Master..Test out c:\teste.csv -SServer -c -t, /CACP -T’

Exec xp_cmdshell @Comando
Go

— Exemplo 6 — Armazenando o Endereço de IP em uma tabela, através da execução de uma Stored Procedure, com base no resultado da XP_CMDShell —

— Exibindo as configurações avançadas —
EXEC sp_configure ‘show advanced options’, 1
Go

— Aplicando a alteração —
RECONFIGURE
Go

— Ativando o uso da XP_CMDShell —
EXEC sp_configure ‘xp_cmdshell’, 1
Go

— Aplicando a alteração —
RECONFIGURE
Go


Create Procedure P_RetornarIP @IP VarChar(25) Output
As
Begin

Set NoCount On

Declare @Auditoria2 Table
(Codigo Int Identity(1,1),
IP VarChar(2000))

Set RowCount 8

Insert Into @Auditoria2
exec master.dbo.xp_cmdshell ‘ipconfig’

Select @IP=(Select Replace(Substring(IP,CharIndex(‘:’,IP,1),25),’:’,”) from @Auditoria2
Where Codigo = 8)

End

Create Table Auditoria
(Codigo Int Identity(1,1),
HostName VarChar(20) Null)

Declare @IP VarChar(25)

Exec P_RetornarIP @IP OutPut
Insert Into Auditoria Values (@IP)

Select * from Auditoria
Go

— Exemplo 7 — Executando uma Instrução Transact-SQL através da XP_ExecResultSets —
Exec Master..XP_ExecResultSet ‘Select ”SP_help ””produtos”””’, ‘BancoDeDados’
Go

Exec Master..XP_ExecResultSet ‘Select ”Select * From produtos”’, ‘BancoDeDados’
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/2020/02/05/8295/

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/

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 agosto em 2020.

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

Até mais.

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.

Short Scripts – Novembro 2019


Olá bom dia, como vai?

Seja bem-vindo, em mais um post da sessão Short Scripts, estamos no mês de novembro, chegamos ao final de 2019!

Você pode estar estranhando o horário que este post foi compartilhado, é realmente nestes últimos dias minha vida esta bastante corrida devido aos afazeres profissionais e acadêmicos, todavia, temos que conseguir se organizar para cumprir os objetivos e alcançar nossas metas.

Mesmo com este horário meio fora do comum, pois são exatamente 01:10, isso mesmo, uma da madrugada deste dia 15/11 feriado nacional, que o post de número 39 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 setembro, 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……..

Continue Lendo “Short Scripts – Novembro 2019”

Short Scripts – Setembro 2019


Olá bom dia, como vai?

Seja bem-vindo, em mais um post da sessão Short Scripts, estamos no mês de setembro, 2019 está começando a apontar para sua reta final, olha vou te dizer uma coisa, “como o tempo passa, não é mesmo (kkkkk)”.

Deixando o tempo de lado, caminhando para mais um dia de muito trabalho e estudos, que hora poder encontra-lo aqui meu dileto visitante, no post de número 38 desta tradicional sessão.

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 hoje, feita no encerramento do post anterior publicado no mês de junho, 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……..

Continue Lendo “Short Scripts – Setembro 2019”

Short Scripts – Junho 2019


Olá boa tarde, tudo bem?

Junho de 2019 chegou, estamos quase na metade do ano, para muitos um período importante, pois as férias de meio de ano estão chegando.

Seguindo em frente, que alegria poder te encontrar em mais um post da sessão Short Scripts, uma das mais movimentadas sessões do meu blog, que esta alçando a marca de 37 posts publicados trimestralmente.

Mantendo a tradição estou retornando com mais um conjunto de “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, estou compartilhando a minha feita a alguns meses no final do último post desta sessão, publicando mais um conjunto de scripts adicionados atualmente na minha biblioteca particular de códigos e exemplos.

O post de hoje

Como de costume selecionei os principais scripts armazenados recentemente na minha biblioteca de códigos, que apresentam os seguintes assuntos:

  • Cláusula Over();
  • Cláusula Where;
  • Comando Create Table;
  • Comando IF;
  • Comando Insert;
  • Comando Print;
  • Comando Select;
  • Comando Update;
  • Comando While;
  • Condições;
  • CTE;
  • DataType Char;
  • DataType DateTime;
  • DataType Int;
  • DataType SmalltInt;
  • DataType TinyInt;
  • DataType UniqueIdentifier;
  • DataType Varchar;
  • Declaração de Variáveis;
  • Diretiva Set Ansi_Warnings;
  • Diretiva Set ArithAbort; 
  • Diretiva Set; 
  • DMFsys.dm_db_index_physical_stats();
  • Erros em agregação de múltiplas colunas;
  • Fragmentação de dados;
  • Fragmentação de índices;
  • Função Cast;
  • Função Coalesce;
  • Função Convert();
  • Função IsNull;
  • Função NewID();
  • Função Object_Id();
  • Função Object_Name();
  • Funções de Agregação;
  • Índices;
  • Operadores;
  • Rebuild Index;
  • Taxas de Fragmentação; e
  • Visão de sistema sys.indexeses.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Junho 2019. 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

— Short Script 1  – Contornando o erro Multiple columns are specified in an aggregated expression containing an outer reference —

Create Table Car
(N_state varchar(20),
City varchar (20),
Cars int)
Go
Insert Into Car
values(‘California’, ‘Los Angeles’,1000),
(‘Ohio’, ‘Columbus’, 300), (‘Texas’, ‘Austin’,400),
(‘Florida’, ‘Miami’,800), (‘Florida’, ‘Orlando’,200)
Go
— Estourando o erro, quantidade de colunas retornadas não atende a quantidade de colunas declaradas —
Select *,
(Select sum(case
when c1.N_state=c2.N_state Then cars
else 0 end)
from car c2) as bb
from car c1
Go
— Exemplo 1 – Utilizando CTE – Contornando o erro —
;with CTE
As
(
Select *, (Select sum(cars) from car) as bb
from car)
Select *, cars, bb, cars/bb as cc from cte
Go
— Exemplo 2 – Select com a cláusula Over() –
Select *, sum(cars) over (partition by N_state) as bb
from car c1
Go

— Short Script 2  – Comparativo entre as função IsNull() e Coalesce() —

CREATE TABLE Strings
(String1 varchar(5),
String2 varchar(10),
String3 varchar(5),
String4 varchar(10))
Go
INSERT INTO dbo.Strings (String1, String2, String3, string4)
VALUES(‘Hello’,NULL,NULL,’Goodbye’)
Go
SELECT ISNULL(String1, String2) AS Expr1,
COALESCE(String1, String2) AS Expr2,
ISNULL(String3, String4) AS Expr3,
COALESCE(String3, String4) AS Expr4
FROM Strings
Go
— Short Script 3  – Obtendo taxas de fragmentação de tabelas antes e depois de um Rebuild —
Select object_name(ddips.object_id) As ‘Tabela’,
si.name As ‘Índice’,
convert(decimal(5,2),isnull(ddips.avg_fragmentation_in_percent,0)) As ‘% Média de Fragmentação’,
ddips.page_count As ‘Páginas’,
ddips.compressed_page_count As ‘Páginas compactadas’,
ddips.record_count As ‘Registros’,
ddips.ghost_record_count As ‘Registros Fantasmas’
From sys.dm_db_index_physical_stats(db_id(), object_id(‘queimadas2018’),null, null, ‘detailed’) ddips Inner Join sys.indexes si
on si.object_id = ddips.object_id
Where ddips.avg_fragmentation_in_percent > 0
Go
— Short Script 4  – Utilizando as diretivas Set ArithAbort, Set Ansi_Warnings —
SET ARITHABORT Off
SET ANSI_WARNINGS Off
GOPRINT ‘Setting ARITHIGNORE ON’
GO
— SET ARITHIGNORE ON and testing. 
SET ARITHIGNORE On;
GO
SELECT 1 / 0 AS DivideByZero
GO
SELECT CAST(256 AS TINYINT) AS Overflow
GOPRINT ‘Setting ARITHIGNORE OFF’
GO
— SET ARITHIGNORE OFF and testing. 
SET ARITHIGNORE OFF
GO
SELECT 1 / 0 AS DivideByZero
GO
SELECT CAST(256 AS TINYINT) AS Overflow
GO
SET ARITHIGNORE On
SET ARITHABORT Off
SET ANSI_WARNINGS Off
SELECT 1/0 AS test
Go
— Short Script 5  – Utilizando DataType UniqueIdentifier em conjunto com a função NewID() —
— Exemplo 1 —
Create Table T1
(Codigo UniqueIdentifier Primary Key,
Descricao varchar(100))
Go
Insert Into T1 (Codigo, Descricao)
Values (NewId(), ‘Oi’),
(NewId(), ‘Testando’)
Go
Select * From T1
Go
— Exemplo 2 —
Create Table T2
(Codigo UniqueIdentifier Primary Key Default NewSequentialID(),
Descricao varchar(100))
Go
Insert Into T2 (Descricao)
Values ( ‘Oi’),
(‘Testando’)
Go
Select * From T2
Go

Muito bem, missão mais que cumprida! Uma nova relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short 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/03/15/short-scripts-marco-2019/

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

https://pedrogalvaojunior.wordpress.com/2018/09/18/short-scripts-setembro-2018/

https://pedrogalvaojunior.wordpress.com/2018/05/10/short-scripts-maio-2018/

https://pedrogalvaojunior.wordpress.com/2018/02/19/short-scripts-fevereiro-2018-transaction-log/

 

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 setembro.

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

Até mais.

Short Scripts – Março 2019


Olá boa tarde, estamos no mês de março, primeiro trimestre de 2019 esta quase se encerrando.

Seguindo em frente, que alegria poder te encontrar em mais um post da sessão Short Scripts, uma das sessões mais recentes do meu blog que esta alçando a marca de 36 posts publicados trimestralmente.

Mantendo a tradição estou retornando com mais um conjunto de “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, estou compartilhando a minha feita a alguns meses no final do último post desta sessão, publicando mais um conjunto de scripts adicionados atualmente na minha biblioteca particular de códigos e exemplos.

O post de hoje

Como de costume selecionei os principais scripts armazenados recentemente na minha biblioteca de códigos, que apresentam os seguintes assuntos:

  • Cálculo de Idade;
  • Cláusula Values;
  • Cláusula Where;
  • Comando Create Procedure;
  • Comando Declare;
  • Comando Exec;
  • Comando Group By;
  • Comando Insert;
  • Comando Order By;
  • Comando Pivot;
  • Comando Select;
  • Common Table Expression;
  • Diretiva Set;
  • DMV sys.dm_os_ring_buffers;
  • DMV sys.dm_os_virtual_address_dump;
  • Filegroup;
  • Função Concat();
  • Função DateDiff();
  • Função de Agregação SUM;
  • Função Month();
  • Função Year();
  • Gerenciamento de Memória;
  • Grupo de Arquivos;
  • Inner Joins;
  • Left Joins;
  • Operador Lógico Condicional Case;
  • Operador Lógico Condicional While;
  • Stored Procedure;
  • Variáveis;
  • Variável do Tipo Tabela;
  • Visão;
  • Visão de Sistema sys.all_objects;
  • Visão de Sistema sys.filegroups;
  • Visão de Sistema sys.indexes;
  • Visão de Sistema sys.syslanguages;
  • Visão de Sistema SYSCACHEOBJECTS; e
  • Visão de Sistemas sys.messages.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Março 2019. 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

— Short Script 1  – Alterando a sequência numérica com base em uma condição —

— Criando a Tabela Valores —
Create Table Valores
(Contador Int Primary Key Identity(1,1),
CodigoCaracter Char(4),
SequenciaDeControle Int)
Go

 

— Inserindo os registros com CódigoCaracter 0001 —
Insert Into Valores Values (‘0001’,1),(‘0001’,2),(‘0001’,3),(‘0001’,4)
Go

— Inserindo os registros com CódigoCaracter 0002 —
Insert Into Valores Values (‘0002’,5),(‘0002’,6),(‘0002’,7),(‘0002’,8)
Go

— Inserindo os registros com CódigoCaracter 0003 —
Insert Into Valores Values (‘0003’,9),(‘0003’,10)
Go

 

— Consultando os registros inseridos —
Select Contador, CodigoCaracter, SequenciaDeControle from Valores
Go

 

— Declarando um bloco de execução para alterar os registros de acordo com uma condição —
Declare @ContadorRegistros Int,
@ContadorSequenciaDeControle Int,
@ValorColunaCodigoCaracter Char(4)

Set @ContadorRegistros=1
Set @ContadorSequenciaDeControle=1

While @ContadorRegistros <= (Select Count(CodigoCaracter) from Valores)
Begin

Set @ValorColunaCodigoCaracter=(Select CodigoCaracter From Valores Where Contador = @ContadorRegistros)

If (@ValorColunaCodigoCaracter = (Select CodigoCaracter From Valores Where Contador = @ContadorRegistros) And @ContadorRegistros > 1)
Set @ContadorSequenciaDeControle=@ContadorSequenciaDeControle + 1
Else
Set @ContadorSequenciaDeControle=0

Update Valores
Set SequenciaDeControle = @ContadorSequenciaDeControle
Where Contador = @ContadorRegistros

Set @ContadorRegistros += 1

End

 

— Consultando os registros após a alteração —
Select Contador, CodigoCaracter, SequenciaDeControle from Valores
Go

 

— Short Script 2 – Utilizando Extended Events – Ring Buffer através da sessão system_health para obter detalhes sobre conexões abertas —

Declare @LanguageID int

Select @LanguageID = lcid
From sys.syslanguages
Where name = @@Language

WITH RingBufferXML
As (SELECT CAST(record as xml) AS RecordXML
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type= ‘RING_BUFFER_CONNECTIVITY’),
RingBufferConnectivity
As (SELECT x.y.value(‘(/Record/@id)[1]’, ‘int’) AS [RecordID],
x.y.value(‘(/Record/ConnectivityTraceRecord/RecordType)[1]’, ‘varchar(max)’) AS RecordType,
x.y.value(‘(/Record/ConnectivityTraceRecord/RecordTime)[1]’, ‘datetime’) AS RecordTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/SniConsumerError)[1]’, ‘int’) AS Error,
x.y.value(‘(/Record/ConnectivityTraceRecord/State)[1]’, ‘int’) AS State,
x.y.value(‘(/Record/ConnectivityTraceRecord/Spid)[1]’, ‘int’) AS SPID,
x.y.value(‘(/Record/ConnectivityTraceRecord/RemoteHost)[1]’, ‘varchar(max)’) AS RemoteHost,
x.y.value(‘(/Record/ConnectivityTraceRecord/RemotePort)[1]’, ‘varchar(max)’) AS RemotePort,
x.y.value(‘(/Record/ConnectivityTraceRecord/LocalHost)[1]’, ‘varchar(max)’) AS LocalHost,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/TotalTime)[1]’, ‘int’) AS TotalTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/EnqueueTime)[1]’, ‘int’) AS EnqueueTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/NetWritesTime)[1]’, ‘int’) AS NetWritesTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/NetReadsTime)[1]’, ‘int’) AS NetReadsTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/Ssl/TotalTime)[1]’, ‘int’) AS SslTotalTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/Sspi/TotalTime)[1]’, ‘int’) AS SspiTotalTime,
x.y.value(‘(/Record/ConnectivityTraceRecord/LoginTimersInMilliseconds/TriggerAndResGovTime)[1]’, ‘int’) AS TriggerAndResGovTime
FROM RingBufferXML
CROSS APPLY RecordXML.nodes(‘//Record’) AS x(y))

SELECT RBC.*, m.text
FROM RingBufferConnectivity RBC
LEFT JOIN sys.messages M ON
RBC.Error = M.message_id AND M.language_id = @LanguageID
WHERE RBC.RecordType IN (‘Error’, ‘LoginTimers’)
ORDER BY RBC.RecordTime DESC
Go

 

— Short Script 3 – Stored Procedure – Realizando o versionamento de código fonte  —

CREATE PROCEDURE dbo.GetOne
AS
SELECT 1
GO

CREATE PROCEDURE dbo.GetOne;2 —Versionamento, recurso antigo
AS
SELECT 2
GO

 

Exec dbo.GetOne;2 — Executando a procedure versão 2
go

 

 

— Short Script 4 – Gerenciamento de Memória  — Como encontrar quem está usandoo espaço de endereço virtual no seu SQL Server —

 

SELECT convert(varchar,getdate(),120) as [Timestamp], max(region_size_in_bytes)/1024 [Total max contiguous block size in KB]

from sys.dm_os_virtual_address_dump

where region_state = 0x00010000 — MEM_FREE
Go

 

Select SUM(virtual_memory_reserved_kb)/1024 as virtual_memory_reserved_mb

from sys.dm_os_memory_clerks

Where type not like ‘%bufferpool%’
Go

With VASummary(Size,Reserved,Free) AS
(SELECT
Size = VaDump.Size,
Reserved =  SUM(CASE(CONVERT(INT, VaDump.Base)^0)
WHEN 0 THEN 0 ELSE 1 END),
Free = SUM(CASE(CONVERT(INT, VaDump.Base)^0)
WHEN 0 THEN 1 ELSE 0 END)
FROM
(
SELECT  CONVERT(VARBINARY, SUM(region_size_in_bytes))
AS Size, region_allocation_base_address AS Base
FROM sys.dm_os_virtual_address_dump
WHERE region_allocation_base_address <> 0x0
GROUP BY region_allocation_base_address

UNION

SELECT CONVERT(VARBINARY, region_size_in_bytes), region_allocation_base_address
FROM sys.dm_os_virtual_address_dump
WHERE region_allocation_base_address  = 0x0
)
AS VaDump
GROUP BY Size)
SELECT SUM(CONVERT(BIGINT,Size)*Free)/1024 AS [Total avail Mem, KB] ,CAST(MAX(Size) AS BIGINT)/1024 AS [Max free size, KB]
FROM VASummary
WHERE Free <> 0
Go

 

SELECT SUM(PAGESUSED)*8/1024 ‘MB of MemToLeave memory consumed by procedures’ FROM MASTER.DBO.SYSCACHEOBJECTS

WHERE PAGESUSED >1
Go

 

— Short Script 5 – Criando um Pivot em conjunto com Visão com Sumarização —

Create Table Fornos
(Id Int Primary Key,
Defeito Varchar(20) Not Null,
Forno Varchar(20) Not Null,
Equipe Varchar(20) Not Null)
Go

 

Insert Into Fornos
Values (1,’DEFEITO A’,’FORNO 3′,’AZUL’),
(2,’DEFEITO A’,’FORNO 2′,’VERDE’),
(3,’DEFEITO B’,’FORNO 1′,’AZUL’),
(4,’DEFEITO A’,’FORNO 1′,’PRETO’),
(5,’DEFEITO B’,’FORNO 2′,’VERDE’),
(6,’DEFEITO B’,’FORNO 2′,’AZUL’),
(7,’DEFEITO A’,’FORNO 1′,’PRETO’),
(8,’DEFEITO A’,’FORNO 2′,’AZUL’)
Go

Select * From Fornos
Go

 

— Gerando o Pivot —
Select * from
(Select CONCAT(Defeito,’ – ‘, Equipe) As DefeitosPorEquipe,
CONCAT(Defeito,’ – ‘, Equipe) As ‘Defeitos Agrupados Por Equipes’,
Equipe,
Forno As ‘Fornos’
From Fornos) As F
Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt
Go

 

— Adicionando os Totais —
Select * from
(
Select CONCAT(Defeito,’ – ‘, Equipe) As DefeitosPorEquipe,
CONCAT(Defeito,’ – ‘, Equipe) As ‘Defeitos Agrupados Por Equipes’,
Equipe,
Forno As ‘Fornos’
From Fornos
) As F
Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt

Union All

Select ‘Totais….’, ‘—->’,
Sum(Azul) As SomaAzul,
Sum(Preto) As SomaPreto,
Sum(Verde) As SomaVerde
From
(
Select CONCAT(Defeito,’ – ‘, Equipe) As DefeitosPorEquipe,
Equipe
From Fornos
) As F
Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt
Go

 

— Short Script 6 – Identificando o filegroup vinculado para cada tabela de usuário —

SELECT o.[name],
o.[type],
i.[name],
i.[index_id],
f.[name]
FROM sys.indexes i INNER JOIN sys.filegroups f
ON i.data_space_id = f.data_space_id
INNER JOIN sys.all_objects o
ON i.[object_id] = o.[object_id]
WHERE i.data_space_id = f.data_space_id
AND o.type = ‘U’ — User Created Tables
GO

 

— Short Script 7 – Realizando o cálculo da idade —

— Exemplo 1 —
Declare @Hoje date

Set @Hoje= cast (current_timestamp as date)

 

SELECT CPF, DATA_NASC,
case when month(@Hoje) > month(DATA_NASC)
then datediff (year, DATA_NASC, @Hoje)
when month(@Hoje) = month(DATA_NASC) and day(@Hoje) >= day(DATA_NASC)
then datediff (year, DATA_NASC, @Hoje)
else datediff (year, DATA_NASC, @Hoje) -1
end as Idade
from tb_idade_dez
Go

 

— Exemplo 2 —
Select CPF, DATA_NASC, (datediff (month, DATA_NASC, @Hoje) / 12) as Idade

from tb_idade_dez
Go

 

— Exemplo 3 —
Select CPF, DATA_NASC, datediff(day,DATA_NASC,getdate())/365.15 as idade

from TB_IDADE_JANEIRO
Go

 

— Exemplo 4 —
Declare @DATAS table (DataNasc date)

INSERT into @DATAS values
(‘19880101’), (‘19880111’), (‘19880112’), (‘19880113’),
(‘19880213’), (‘19880313’), (‘19880413’), (‘19880513’),
(‘19880613’), (‘19880713’), (‘19880813’), (‘19880913’),
(‘19881013’), (‘19881113’), (‘19881213’)

 

Declare @Hoje date
Set @Hoje= ‘20190112’

 

SELECT DataNasc, @Hoje as Hoje,
datediff(day, DataNasc, @Hoje)/365.15 as idade,
case when month(@Hoje) > month(DataNasc) then datediff (year, DataNasc, @Hoje)
when month(@Hoje) = month(DataNasc) and day(@Hoje) >= day(DataNasc) then datediff (year, DataNasc, @Hoje)
else
datediff (year, DataNasc, @Hoje) -1
end as Anos
from @DATAS
Go

Muito bem, missão mais que cumprida! Uma nova relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short entre aspas “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/2018/11/20/short-scripts-novembro-2018/

https://pedrogalvaojunior.wordpress.com/2018/09/18/short-scripts-setembro-2018/

https://pedrogalvaojunior.wordpress.com/2018/05/10/short-scripts-maio-2018/

https://pedrogalvaojunior.wordpress.com/2018/02/19/short-scripts-fevereiro-2018-transaction-log/

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 junho.

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

Até mais.

Short Scripts – Novembro 2018


Muito boa tarde, já estamos no mês de novembro, e este é mais um post da sessão Short Scripts.

Tudo bem? Já esta se preparando para as festividades de final de ano?

Eu particularmente ainda não, na verdade a grana esta curta então tenho que esperar um pouquinho….

Seguindo em frente, que alegria poder te encontrar em mais um post da sessão Short Scripts, uma das sessões mais recentes do meu blog que esta alçando a marca de 35 posts publicados trimestralmente.

Mantendo a tradição estou retornando com mais um conjunto de “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, estou compartilhando a minha feita a alguns meses no final do último post desta sessão, publicando mais um conjunto de scripts adicionados atualmente na minha biblioteca particular de códigos e exemplos.

O post de hoje

Normalmente compartilho os principais scripts armazenados nos últimos meses, no post de hoje vou fazer a mesma forma que o anterior, compartilhar scripts relacionados a um tema específico, sendo o tema de hoje a propriedade Identity(), desta maneira, você vai se deparar com alguns códigos que estejam envolvidos com este tema e que também se vinculem com outros, dentre os quais destaco:

  • Ativando e Desativando a propriedade Identity;
  • Capturando o último valor Identity;
  • Comando DBCC CheckIdenty();
  • Função Identity;
  • Ident_Current;
  • Realizando insert com a propriedade Identity;
  • Refazer numeração sequencial;
  • Scope_Identity;
  • Select Into;
  • Sequência Numérica;
  • Set Identity_Insert On / Off;
  • Tabela de sistema sys.indexes;
  • Tabela de sistema sys.objects;
  • Tabela de sistema sys.identity_columns;
  • Tabela de sistema sys.index_column; e
  • Variáveis de sistema @@Identity.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Novembro 2018 . 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 a vontade para compartilhar, comentar e melhorar cada um destes códigos.

Short Scripts

— Short Script 1  – Ativando e Desativando a propriedade Identity() —

SET IDENTITY_INSERT NomedaTabela On
Go

SET IDENTITY_INSERT NomeDaTabela Off
Go

— Short Script 2  – Comando DBCC CheckIdent(), redefinindo a sequência Identity() —
Declare @Identity Int

— Obtendo o último valor Identity() —
Set @Identity=(Select Ident_Current(‘NomedaTabela’))

— Aplicando e redefinindo a sequência Identity através do último valor obtido —
DBCC CheckIdent(‘NomedaTabela‘,Reseed,@Identity)
Go

— Short Script 3  – Identificando se a chave primária possui a propriedade Identity aplicada —
Select O.Object_Id,
O.Name,
Case IC.is_identity
When 0 Then ‘Identity desabilitado’
When 1 Then ‘Identity habilitado’
End As ‘Identity’
From sys.objects O Inner Join sys.identity_columns IC
On O.object_id = IC.object_id
Where IC.is_identity=1

— Short Script 4  – Obtendo o último valor Identity de cada tabela —
SELECT sys.tables.name AS [Table Name],
sys.identity_columns.name AS [Column Name],
sys.types.name as Type,
last_value AS [Last Value]
FROM sys.identity_columns INNER JOIN sys.tables
ON sys.identity_columns.object_id = sys.tables.object_id
Inner join sys.types
on sys.types.user_type_id = sys.identity_columns.user_type_id
ORDER BY last_value DESC

— Short Script 5  – Resentando o valor Identity atualmente em uso — 
DBCC CHECKIDENT (‘NomedaTabela’, RESEED, 0)
Go

— Short Script 6 – Identificando o valor Identity atualmente em uso —
DBCC CHECKIDENT (‘NomedaTabela’, NORESEED)
Go

— Short Script 7 – Utilizando a função Identity() em conjunto com o comando Insert —

— Exemplo 1 —
Create Table Valores
(Codigo Int)

Insert Into Valores Values(1)
Go 100

Select Identity(Int, 2,2) As Linha, Codigo Into Registros from Valores
Go

— Exemplo 2 —
Select identity(int, 1,1) As Seq, name from sys.sysdatabases
Go

Muito bem, missão mais que cumprida! Uma nova relação de short scripts acaba de ser compartilhada, mesmo sendo denominados short entre aspas “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/2018/09/18/short-scripts-setembro-2018/

https://pedrogalvaojunior.wordpress.com/2018/05/10/short-scripts-maio-2018/

https://pedrogalvaojunior.wordpress.com/2018/02/19/short-scripts-fevereiro-2018-transaction-log/

https://pedrogalvaojunior.wordpress.com/2017/12/09/short-scripts-dezembro-2017/

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 somente em 2019, mais especificamente no mês de fevereiro.

Um forte abraço, lhe desejo um ótimo final de ano.

Até mais.