Short Scripts – Janeiro – 2015

Exemplo – Obtendo informações – Page Life ExpectancyBom dia, Comunidade….

Estamos na metade de Janeiro de 2015 é o tempo passa e temos que acompanhar esta grande aeronave chamada “Tempo” em sua viagem até o final de 2015.

Muito bem, dando continuidade nos posts de 2015 e mantendo a tradição quero compartilhar com vocês a primeira relação de Short Scripts de 2015. Como você deve saber, a sessão Short Scripts tem como objetivo apresentar pequenos Códigos, Linhas de Código, Trechos ou mais especificamente Scripts utilizados no SQL Server em todas as suas principais versões que podem nos ajudar em alguns cenários e ambientes.

Dentre os assuntos e conceitos, destaco:

  • Claúsula Where;
  • CTE e CTE Recursiva;
  • Check Constraint;
  • Memory Clerks;
  • Page Life Expectancy;
  • Server Memory; e
  • Trigger.

Então fique a vontade para copiar e compartilhar:

Exemplo – Obtendo informações – Utilizando sys.dm_os_memory_clerks

SELECT  type,
SUM(single_pages_kb)/1024. AS [SPA Mem, MB],
SUM(Multi_pages_kb)/1024. AS [MPA Mem,MB]
FROM sys.dm_os_memory_clerks
GROUP BY type
HAVING  SUM(single_pages_kb) + sum(Multi_pages_kb)  > 40000 — Só os maiores consumidores de memória
ORDER BY SUM(single_pages_kb) DESC

— Total utilizado
SELECT  SUM(single_pages_kb)/1024. AS [SPA Mem, KB],
SUM(Multi_pages_kb)/1024. AS [MPA Mem, KB]
FROM sys.dm_os_memory_clerks

Exemplo – Obtendo informações – Page Life Expectancy

SELECT cntr_value AS ‘Page Life Expectancy’
FROM sys.dm_os_performance_counters
WHERE object_name = ‘SQLServer:Buffer Manager’
AND counter_name = ‘Page life expectancy’

Exemplo – Informações – Server Memory

select counter_name,
cntr_value,
cast((cntr_value/1024.0)/1024.0 as numeric(8,2)) as Gb
from sys.dm_os_performance_counters
where counter_name like ‘%server_memory%’;

Exemplo – Básico – Descobrindo se o Trigger é Insert, Update ou Delete

Create Database Teste
Go
Use Teste
Go

Create Table T1
(Codigo Int)

Create Table T2
(Codigo Int,
Comando Varchar(10))
Go

Create Trigger Trigger1
On T1
After Insert, Update, Delete
As
Begin

If Exists (Select * From Inserted) And Not Exists (Select * From Deleted)
Insert Into T2 (Comando) Values (‘Insert’)

If Exists (Select * From Inserted) And Exists (Select * From Deleted)
Insert Into T2 (Comando) Values (‘Update’)

If Not Exists (Select * From Inserted) And Exists (Select * From Deleted)
Insert Into T2 (Comando) Values (‘Delete’)

End

Insert Into T1 Values (1)
Insert Into T1 Values (2)
Insert Into T1 Values (3)
Insert Into T1 Values (4)
Insert Into T1 Values (5)

Select * from T2

Exemplo – Utilizando – CTE Composta + CTE Recursiva

create table #Atendimentos
(id_Status_Entrega int identity primary Key,
id_Aviso_Receb int,
Situacao int,
DataHoraRegistro datetime default getdate(),
Quem_Recebeu varchar(20))

insert into #Atendimentos
(id_Aviso_Receb, Situacao, DataHoraRegistro, Quem_Recebeu)
values (52505,0,’2014-12-29 11:36′, ‘julio.mallioti’),
(52505,1,’2014-12-29 13:05′, ‘julio.mallioti’),
(52505,2,’2014-12-29 14:05′, ‘julio.mallioti’)
;with cte
as(
select * ,
row_number()over(partition by id_Aviso_Receb order by Situacao) as rownum
from #Atendimentos
),
cte2
as(
select *, cast(NULL as datetime) Diferenca from cte where rownum = 1 –anchor
union all
select cte.*,
cast((cte.DataHoraRegistro- cte2.DataHoraRegistro) as Datetime) Diferenca
from cte join cte2
on cte.rownum = cte2.rownum+1
and cte.id_Aviso_Receb = cte2.id_Aviso_Receb)

select *, cast(diferenca as time) Diferenca_Time
from cte2
order by id_Aviso_Receb, Situação

Exemplo – Criando – Check Constraint + User Function vinculada com Check Constraint

CREATE DATABASE [Exemplo]
go

USE [Exemplo]
GO
— Cria a Tabela de Relacionamento a ser Verificada
CREATE TABLE [dbo].[Estados](
[id] [int] IDENTITY(1,1) NOT NULL Primary Key,
[Estado] [char](2) NULL)
GO

— Esse Insert deve funcionar
insert into Estados (Estado) values (‘RS’), (‘SP’)

— Cria Tabela
CREATE TABLE [dbo].[Clientes](
[Id] [int] IDENTITY(1,1) NOT NULL Primary Key,
[Nome] [varchar](50) NULL,
[idEstado] [int] NULL)
go

— Cria a Function para Verificação
create function [dbo].[VerificaEstado](@idEstado int)
returns int
as
begin
— VErifica se o estado existe na tabela de Estados
return (select id from Estados where id = @idEstado)
end
GO

— Implementa a Function
ALTER TABLE [dbo].[Clientes]  WITH CHECK
ADD  CONSTRAINT [chk_VerificaEstado]
CHECK  (([dbo].[VerificaEstado]([idEstado]) IS NOT NULL))
GO

ALTER TABLE [dbo].[Clientes]
CHECK CONSTRAINT [chk_VerificaEstado]
GO

— Esse Insert Deve Funcionar
insert into Clientes (Nome, idEstado) values (‘Roberto Fonseca’, 1)
— Esse Insert Tem que dar Erro de Constrant de Check Violada
insert into Clientes (Nome, idEstado) values (‘Tem que Dar Erro’, 3)

select * from Clientes

use master
go
drop database exemplo
go

—————————————————————————————————–

Mais uma vez obrigado por sua visita, espero que você tenha gostado.

Nos encontramos em breve.

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.

Um comentário em “Short Scripts – Janeiro – 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