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.

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. 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. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove – Campus São Roque. 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 1994 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, entre outros recursos. 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. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, etc. Trabalhei entre 2011 e 2017 como Administrador de Banco de Dados e Coordenador de TI no FIT – Instituto de Tecnologia da Flextronics, atualmente exerço a função de Professor Universitário na FATEC São Roque. CTO da Galvão Tecnologia, consultoria especializada em Gestão de TI, Administração de Servidores Windows Server, Bancos de Dados Microsoft SQL Server e Virtualização. Possuo titulação Oficial Microsoft MVP e reconhecimentos: MCC, MSTC e MIE.