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.