Short Scripts – Outubro – 2015

Salve, salve, comunidade da tecnologia e amantes do Microsoft SQL Server.

Tudo bem?

Hoje quarta – feira, estou retornando com mais um posts dedicado a minha sessão Short Script, alias acredito que esta é uma das sessões mais procuradas do meu blog.

Caso você não conheça esta sessão, vou explicá-la rapidamente: “A sessão Short Scripts foi criada em 2009 com objetivo de compartilhar de forma simples é rápidas, pequenos scripts(códigos) criados e utilizados no Microsoft SQL Server. Como seu próprio nome já defini Short Scripts, são realmente pequenos códigos que podem fazer toda diferença no momento da correção ou solução de um problema, dúvida ou até mesmo dificuldade.”

Muito bem, espero que este pequeno briefing possa ter ajudado a entender um pouco mais sobre esta sessão. Na relação de hoje, gostaria de destacar os seguintes recursos ou funcionalidades:

  • Bitwise;
  • Contagem de caracteres;
  • Erro 3609;
  • Operador Mod;
  • Nível de Compatibilidade;
  • Numa Node;
  • Rollback Transaction;
  • SET RowCount;
  • Sys.dm_exec_sessions;
  • Sys.dm_os_schedulers;
  • Tratamento de Erros;
  • Time – Expression; e
  • Variavel Table.

Fique a vontade para compartilhar este conteúdo em suas redes sociais e comunidade, conto com seus comentários, sugestões, críticas e observações. Segue abaixo a relação de Short Scripts:

— Short Script 1 – Sys.dm_os_schedulers – Identificando o número de Numa Nodes —

Select * from sys.dm_os_schedulers

Go

— Observar a coluna parent_node_id para identificar o Node

— Observar a coluna cpu_id para identificar o número da CPU

 

— Short Script 2 – Trabalhando com variáveis + Bitwise + Mod –

Declare @b As Int = 5,

@C as Int =5,

@D Int = 5,

@e int = 56

 

Set @b=5;

Set @b &=1 — Bitwise AND EQUALS —

Set @c=5;

Set @c |=1 — Bitwise OR EQUALS —

Set @d ^=1 — (Bitwise Exclusive OR EQUALS) —

Set @e %= 5 — Modulo EQUALS — Mod resto da divisão —

 

Select @b As ‘b’,

@c As ‘c’,

@d As ‘d’,

@e As ‘e’

Go

 

— Short Script 3 – Criando um loop infinito utilizando SET ROWCOUNT + Variable Table –

DECLARE @i float,

@rc int

 

set @i = 0

 

while @i <> 1

begin

declare @a table(a int)

 

set @rc = @i + 0.9

 

set rowcount @rc

 

insert into @a

select id from sysobjects

 

set @i = @i + 0.1

end

 

SELECT * FROM @a

Go

 

— Short Script 4 – Função – Contar caracteres específicos dentro de um texto –

Create FUNCTION [dbo].[CountChar] (@Palavra Varchar(100), @String Varchar(Max))

RETURNS int AS

Begin

Declare @Count int, @CountTexto int

 

Set @CountTexto = 0

Set @Count = 0

 

While @Count <= Len(@String)

Begin

Set @CountTexto = Case

When Substring(@String, @Count, Len(@Palavra)) = @Palavra Then @CountTexto + 1

Else @CountTexto

End

 

Set @Count = @Count + 1

End

 

Return @CountTexto

End

 

— Executando —

Select dbo.CountChar(‘/’,’Pedro / Galvão / Junior’)

Go

 

— Short Script 5 – Simulando – Diferença entre nível de compatibilidade 120 e 100 –

Alter Database [AdventureWorks2014]

Set Compatibility_Level = 100

 

SET DATEFORMAT dmy;

 

DECLARE @t2 date = ’12/5/2011′ ;

 

SET LANGUAGE dutch;

SELECT CONVERT(varchar(11), @t2, 106);

Go

 

— Results when the compatibility level is less than 120.

12 May 2011

 

Alter Database [AdventureWorks2014]

Set Compatibility_Level = 120

 

SET DATEFORMAT dmy;

 

DECLARE @t2 date = ’12/5/2011′ ;

 

SET LANGUAGE dutch;

SELECT CONVERT(varchar(11), @t2, 106);

 

— Results when the compatibility level is set to 120).

12 mei 2011

 

— Short Script 6 – Trabalhando com Time-Expression FN para cálculo de horas –

Create Table #s(Start Datetime, [end] Datetime)

 

Insert Into #s

Select Cast(‘2010-04-08 12:00:00’ As datetime),Cast(‘2010-04-08 14:10:00’ As datetime) Union All

Select Cast(‘2010-04-08 13:00:00’ As datetime),Cast(‘2010-04-08 14:00:00’ As datetime) Union All

Select Cast(‘2010-04-08 15:45:00’ As datetime),Cast(‘2010-04-08 16:00:00’ As datetime) Union All

Select Cast(‘2010-04-08 15:00:00’ As datetime),Cast(‘2010-04-08 18:00:00’ As datetime)

 

 

— Exemplo 1 —

Select Round(Cast(Sum(({fn Hour([end])}-{fn Hour(start)})) As decimal(4,2)) +

Cast(Sum({fn Minute([end])} –

{fn Minute( start)}) As decimal(4,2))/60,4) As ‘Total Hrs’ From #s

 

— Exemplo 2 —

Select {fn Hour([end])}+{fn Hour(GetDate())},

{fn Minute([end])},

{fn Second([end])}   from #S

Go

 

— Short Script 7 – Utilizando Rollback Transaction dentro de Trigger + Realizando tratamento de erro 3609 –

Use DBMonitor

Go

 

Create Table T1

(Codigo Int)

Go

 

Create Trigger T_ValidarHorario

On T1

For Insert, Update, Delete

As

Begin

Set NoCount On

Set DateFirst 7

 

Declare @Horario TinyInt,

@DiaSemana TinyInt

 

Set @Horario = DATEPART(HH, Getdate())

Set @DiaSemana = DATEPART(WeekDay,GetDate())

 

If (@Horario = 23 And @DiaSemana = 6)

Begin

Begin Tran

Select ‘error….’

 

Rollback Transaction

Begin Transaction

End

End

 

Insert Into T1 Values(4)

 

Select * from T1

 

Go

 

— Short Script 8 – Utilizando – SYS.DM_EXEC_SESSIONS para monitoramento de querys em execução –

SELECT

DES.SESSION_ID,

DES.CPU_TIME,

DES.READS,

DES.WRITES,

DES.LOGICAL_READS,

DES.ROW_COUNT,

DER.SESSION_ID,

DES.STATUS,

DES.HOST_NAME,

DES.PROGRAM_NAME,

DES.LOGIN_NAME,

DES.ORIGINAL_LOGIN_NAME,

DEC.CLIENT_NET_ADDRESS,

DEC.AUTH_SCHEME,

DEC.NET_TRANSPORT,

SUBSTRING(T.[TEXT], DER.[STATEMENT_START_OFFSET] / 2,

COALESCE(NULLIF(DER.[STATEMENT_END_OFFSET], – 1) / 2, 2147483647)) AS COMANDO

FROM

SYS.DM_EXEC_SESSIONS AS DES

INNER JOIN SYS.DM_EXEC_REQUESTS DER

ON DER.BLOCKING_SESSION_ID = DES.SESSION_ID

INNER JOIN SYS.DM_EXEC_CONNECTIONS DEC

ON DEC.SESSION_ID = DES.SESSION_ID

INNER JOIN SYS.DM_EXEC_REQUESTS DER2

ON DER2.SESSION_ID = DES.SESSION_ID

CROSS APPLY SYS.DM_EXEC_SQL_TEXT(DER.[SQL_HANDLE]) AS T

GO

 

Mais uma vez obrigado por sua visita, agradeço a sua participação, não deixe de acessar os últimos Shorts Scripts publicados em 2015:

https://pedrogalvaojunior.wordpress.com/2015/08/26/short-scripts-agosto-2015/

https://pedrogalvaojunior.wordpress.com/2015/06/03/short-script-junho-2015/

https://pedrogalvaojunior.wordpress.com/2015/05/04/short-script-maio-2015/

Nos encontramos em breve.

Até mais.

 

 

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove - Campus São Roque. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP - Faculdade de Informática e Administração Paulista de São Paulo. Pós-Graduado em Gestão da Tecnologia da Informação Faculdade - ESAMC Sorocaba. Cursando Mestrado em Ciências da Computação - UFSCar - Campus - Sorocaba. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1995 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator - Administrador de Banco de Dados - SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, Triggers. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, para versões: 2000, 2005, 2008, 2008 R2, 2012 e 2014. Atualmente trabalho como Administrador de Banco de Dados no FIT - Instituto de Tecnologia da Flextronics, como também, Consultor em Projetos de Tunnig e Performance para clientes. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Possuo titulação Oficial Microsoft MVP - SQL Server renovada desde 2007.

3 comentários em “Short Scripts – Outubro – 2015”

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s