Material de Apoio – Fevereiro 2018


Boa tarde.

Tudo bem? E ai esta curtindo o carnaval?

Espero que sim, eu estou aqui mais uma vez procurando colaborar e compartilhar com a comunidade técnica em mais um post dedicado exclusivamente ao meu blog. Fico feliz em encontrar você aqui fazendo mais uma visita ao meu blog, neste feriado, espero que tenha gostado do conteúdo aqui encontrado.

O post de hoje

 

Seja bem-vindo a mais um post da sessão Material de Apoio, sendo o primeiro do ano de 2018 e de número 155 no total desta sessão.

Para aqueles que já acompanham o meu blog a um certo tempo, os posts dedicados a sessão Material de Apoio, possuem o objetivo de compartilhar o conhecimento de recursos, funcionalidades e procedimentos que podemos realizar no Microsoft SQL Server.

Hoje não será diferente, estou trazendo alguns dos mais recentes scripts  catalogados nos últimos meses, que atualmente estão compondo a minha galeria de códigos formada ao longo dos anos de trabalho como DBA e atualmente como Professor de Banco de Dados.

Neste post você vai encontrar arquivos relacionados com os seguintes temas:

  • Armazenamento de arquivos;
  • Cláusula Values;
  • Comando Select;
    Comando Top;
  • Endereço de e-mails;
  • Excel;
  • Grant All Permissions;
  • Impactos na Ordenação de dados;
  • Índices;
  • Ordenação de Colunas;
  • Passwords;
  • Performance;
  • Random Character;
  • Tabelas;
  • User Defined Function; e
  • Validação de dados.

Espero que este conteúdo possa lhe ajudar em seus atividades profissionais e acadêmicas. Por questões de compatibilidade com a plataforma WordPress.com, todos os arquivos estão renomeados com a extensão .doc ao final do seu respectivo nome, sendo assim, após o download torna-se necessário remover esta extensão, mantendo somente a extensão padrão .sql.

Material de Apoio

A seguir apresento a relação de arquivos  selecionados:

1 – Material de Apoio – Fevereiro 2018 – Realizando a validação de endereços de e-mail.sql

2 – Material de Apoio – Fevereiro 2018 – Impacto na Ordenação de Colunas em Índice – Comandos DML.sql

3 – Material de Apoio – Fevereiro 2018 – Generating A Password in SQL Server with T-SQL from Random Characters.sql

4 – Material de Apoio – Fevereiro 2018 – Simple SQL Server Function to Generate Random 8 Character Password.sql

5 – Material de Apoio – Fevereiro 2018 – Comando Select em conjunto com comando Top e cláusula Values.sql

6 – Material de Apoio – Fevereiro 2018 – Atribuindo Grant All para todas as tabelas.sql

7 – Material de Apoio – Fevereiro 2018 – Como armazenar arquivos do Excel diretamente no SQL Server.sql

Fique a vontade para copiar, editar, compartilhar e distribuir estes arquivos com seus contatos, aproveite se possível deixe seu comentário, críticas, sugestões e observações.

Nota: Todos os arquivos disponibilizados foram obtidos ou criados com autorização de seus autores, sendo estes, passíveis de direitos autorais.

Links

Caso você queira acessar os posts anteriores da sessão, não perca tempo utilize os links listados abaixo:

https://pedrogalvaojunior.wordpress.com/2017/11/04/material-de-apoio-novembro-2017/

https://pedrogalvaojunior.wordpress.com/2017/08/08/material-de-apoio-agosto-2017/

https://pedrogalvaojunior.wordpress.com/2017/05/09/material-de-apoio-maio-2017/

Agradecimento

Quero agradecer imensamente a sua visita, ainda mais hoje neste feriadão prolongado de carnaval.

Não deixe de acessar os outros posts das demais sessões, o próximo post desta sessão será publicado no mês de abril, até lá continue curtindo sua vida e compartilhando suas experiência.

Até a próxima, sucesso….

Anúncios

Novo System Center Management Pack v7.0.2.0 para SQL Server


A Microsoft anunciou no último dia 05 de fevereiro no blog SQL Server Release Services a disponibilidade do System Center Management Pack v7.0.2.0 para as versões do SQL Server 2016, 2014, 2012 e 2008.

O Management Pack possibilita a descoberta e monitoramento de bancos de dados, agentes do SQL Server e outros componentes relacionados usando o System Center Operations Manager. De acordo com o anúncio da Microsoft, a versão 7.0.2.0 traz correções para múltiplos bugs. Um deles faz com que scripts de monitoramento falhem com o erro “No coercion operator is defined…”.

System Center Management Pack v7.0.2.0 para SQL Server

Faça o download do System Center Management Pack v7.0.2.0 para SQL Server

Download para SQL Server 2016
Download para SQL Server 2014
Download para SQL Server 2008 e 2012
Download para SQL Server Dashboards

Mais detalhes e a lista com os bugs corrigidos estão disponíveis no post com o anúncio da Microsoft.

Fontes e Direitos Autorais:  – 05/02/2018.

Windows Server Premium Assurance e SQL Server Premium Assurance já estão disponíveis


Anunciados em dezembro passado, os planos Windows Server Premium Assurance e SQL Server Premium Assurance já estão disponíveis para empresas que precisam de mais tempo de suporte para o Windows Server e SQL Server.

Windows Server Premium Assurance e a SQL Server Premium Assurance

De acordo com a Microsoft, estes planos adicionam mais seis anos de suporte para o Windows Server e para o SQL Server. Com isso o tempo mínimo de suporte para estes produtos passa a ser de 16 anos: cinco anos da fase de suporte padrão ou mainstream, cinco anos da fase de suporte estendido e o período extra de seis anos oferecido via Premium Assurance:

Este período adicional de suporte oferece atualizações de segurança classificadas como críticas e como importantes para o Windows Server e SQL Server.

De acordo com o anúncio da Microsoft, as empresas podem comprar os planos Windows Server Premium Assurance e SQL Server Premium Assurance juntos ou separadamente.

Windows Server Premium Assurance e SQL Server Premium Assurance já estão disponíveis

Os dois novos planos já estão disponíveis e os primeiros produtos cobertos por eles são o SQL Server 2008 e 2008 R2, que terão sua fase de suporte estendido encerrada em julho de 2019, e Windows Server 2008 e 2008 R2, que terão sua fase de suporte estendido encerrada em janeiro de 2020.

As ofertas Windows Server Premium Assurance e SQL Server Premium Assurance também são vendidas como complementos para produtos com Software Assurance.

Saiba mais sobre estes planos clicando aqui.

Fontes e Direitos Autorais: Baboo.com –

#11 – Para que serve


Boa tarde, boa tarde, boa tardeeeeee…..

Tudo bem pessoal?

Hoje 16 de Dezembro, data inesquecível para qualquer corinthiano, estamos completando mais um aniversário da fantástica e memorável conquista do Mundial de Clubes da Fifa, melhor dizendo o Bi-Campeonato Mundial de Clubes em 2012.

Fico honrado com a sua ilustre visita, seja bem – vindo mais uma vez ao meu blog, espero que você consiga encontrar o que esta procurando ou algo que possa lhe agradar.

Este é mais um post da sessão Para que serve, lançada no início de 2016 e que esta chegando ao post de número 11, isso mesmo estamos no décimo primeiro post dedicado a esta sessão que aos poucos esta conseguindo se tornar uma referência de conhecimento diferenciado no meu Blog.

Após esta tradicional saudação, chegou a hora de falar sobre o #11 – Para que serve de hoje, tenho a certeza que você vai gostar….


Introdução

Como você já deve ter percebido os posts relacionados a esta sessão tem o objetivo de apresentar ou até mesmo em outros casos demonstrar como exemplos de código, aplicativos, utilitários, entre outros elementos envolvidos a banco de dados ou gerenciadores de bancos de dados dentro eles o Microsoft SQL Server podem ser utilizados para se obter uma possível solução de um problema, como em outros casos orientar na sua forma de utilização.

Para o post de hoje vou destacar um script que utilizei no decorrer desta semana, na área de uma determinada aplicação, o mesmo não foi a solução do meu problema, mas ajuda de forma considerável.

Basicamente a minha necessidade era identificar ao longo de um período de tempo quais tipos de objetos estavam gerando e acumulando cache em uma instância de banco de dados Microsoft SQL Server 2014, foi justamente para este cenário que de maneira direta realizei o uso da DMF – Dynamic Management Function – sys.dm_exec_cached_plans implementada a partir da versão 2008 do Microsoft SQL Server.

Sys.dm_exec_cached_plans

Esta foi uma das primeiras DMF adicionadas pelo time de desenvolvimento do Microsoft SQL Server na versão 2008, onde a Microsoft introduziu uma nova forma de gerenciamento um servidor ou instância de Banco de Dados.

A sys.dm_exec_cachec_plan tem como finalidade principal retornao conjunto de linhas relacionadas para cada plano de consulta armazenada em cache mantido em memória no SQL Server, possibilitando assim uma execução do conjunto de recursos que necessitam destes objetos de forma mais rápido e simplificada.

Você pode usar essa função de gerenciamento dinâmico para encontrar e identificar dados em tempo real relacionados a:

  • Cached Query Plans;
  • Cached Query Text;
  • Quantidade de memória usada pelo plan cached; e
  • Quantidade de reutilização de plan cached.

Para muitos profissionais, a sys_dm_exec_cached_plans é considerada uma das DMFs mais fácies e práticas para ser utilizada em atividades de análise e manutenção de um banco de dados, devido principalmente por possuir uma sintaxe simples que não requer parâmetros adicionais no momento da sua execução.

#11 Para que serve – Identificando os tipos de cache e quantidade armazenada no Query Plan —

Agora que conhecemos um pouco do que esta relacionada com este post, vamos então conhecer este script que poderá nos ajudar a obter todas as possíveis informações relacionadas aos tipos de cache e demais dados relacionados com esta importante área de armazenamento em memória do Microsoft SQL Server.

Para isso vamos utilizar o Bloco de Código apresentado a seguir, que demonstra como a sys_dm_exec_cached_plans pode ser utilizada:

– Bloco de Código —

sys_dm_exec_cached_plans

Realizando uma rápida análise, fica fácil observar que o uso desta DMF realmente é muito simples, como também, trata-se de um bloco de código com um nível de complexidade muito pequena, onde estamos fazendo uso do conjunto de colunas existente na própria DMF.

A parte mais complexa do código esta relacionado a contagem do total de planos gerados e armazenados em cached para cada tipo de recurso, em conjunto com o total em megabytes ocupado em memória pelo mesmo. Vale ressaltar que este bloco de código foi testado e validado a partir da versão 2008 e demais versões: R2, 2012, 2014 e também 2016.

Após executarmos o bloco de código apresentando anteriormente, o Management Studio deverá retornar um conjunto de colunas e valores similares ao apresentado na Figura 1 apresentada abaixo:

sys_dm_exec_cached_plans-2Figura 1 – Relação de tipos de cache e suas respectivas quantidades armazenadas e memória ocupada.

Agora fica mais fácil notar a existência das colunas Cache TypeTotal Plans e Total MBs, são justamentes estas as colunas que nos permitem encontrar as informações relacionadas aos tipos de cache, total de planos armazenados e espaço ocupado em memória em nosso servidor ou instância de bancos de dados Microsoft SQL Server.

Falando um pouco sobre estas três colunas é possível observar:

Cache Type: Esta coluna apresenta os tipos de cache identificados pela sys_dm_exec_cached_plans.

Total Plans: Retorna a quantidade de Plan Cached armazenadas em tempo real para os respectivos tipos de cache coletados na sys_dm_exec_cached_plans.

Total MBs: Apresenta a quantidade de memória ocupada para cada Cache Type identificados pela sys.dm_exec_plans, sendo este valor correspondente ao total armazenado ao longo do tempo de execução da instância ou servidor de banco de dados, com base, no último processo de reinicialização.

Acredito que agora ficou bem mais fácil entender os dados retornados após o processamento do bloco de código, como também, o que esta DMF pode nos oferecer de recursos em um momento de análise mais aprofundada do uso dos tipos de cached.

Referências

https://msdn.microsoft.com/en-us/library/ms187404.aspx

https://msdn.microsoft.com/en-us/library/ms189488.aspx

https://msdn.microsoft.com/en-us/library/ms179875.aspx

https://msdn.microsoft.com/en-us/library/ms189747.aspx

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar uns dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2016/11/15/10-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2016/10/08/09-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2016/08/06/07-para-que-serve/

Conclusão

Administrar um banco de dados não é uma tarefa das mais complicadas do mundo, mas quando se referimos em administratar um servidor de banco de dados ou conjunto de servidores de bancos de dados o cenário com certeza muda bastante.

Foi pensando neste tipo de situação que compartilhei com vocês hoje este script no #11 – Para que serve, que apresenta como podemos de maneira fácil, rápida, segura e muito prática encontrar informações relacionadas aos tipos de cache existentes no Microsoft SQL Server, suas respectivas quantidades armazenadas e principalmente o espaço ocupado.

Esta não é uma atividade que você vai realizar todos os dias, particularmente falando, foram poucas as vezes que tive a real necessidade de mergulhar mais a fundo nesta parte de uma instância ou servidor de banco de dados, mas sempre vale a pena conhecer, saber que este de funcionalidade existe e pode ser utilizada de forma rápida e prática.

Agradecimentos

Mais uma vez obrigado por sua visita, agradeço sua atenção, fique a vontade para enviar suas críticas, sugestões, observações e comentários.

Aproveitando este final de ano, quero lhe desejar um Feliz Natal e Próspero Ano Novo.

Nos encontramos em breve, até lá…..

#10 – Para que serve


O louco meu, pleno feriadão e você esta passando por aqui no meu blog……

Que legal, sensacional, fico honrado com a sua ilustre visita, seja bem – vindo mais uma vez ao meu blog, espero que você consiga encontrar o que esta procurando ou algo que possa lhe agradar.

Este é mais um post da sessão Para que serve, lançada no início de 2016 e que esta chegando ao post de número 10, isso mesmo estamos no décimo post dedicado a esta sessão que aos poucos esta conseguindo se tornar uma referência de conhecimento diferenciado no meu Blog.

É isso ai, após esta tradicional saudação, chegou a hora de falar sobre o #10 – Para que serve de hoje, tenho a certeza que você vai gostar….


Introdução

Como você já deve ter percebido os posts relacionados a esta sessão tem o objetivo de apresentar e em alguns casos demonstrar como exemplos de código, aplicativos, utilitários, entre outros elementos envolvidos a banco de dados ou gerenciadores de bancos de dados dentro eles o Microsoft SQL Server podem ser utilizados para se obter uma possível solução de um problema, como em outros casos orientar na sua forma de utilização.

Para o post de hoje vou destacar um script que utilizei recentemente e posso dizer que foi de grande ajuda, mas antes de apresentar este recurso vou destacar um pouco sobre alguns elementos relacionados a ele, dentre os quais destaco File Growth.

File Growth

E ai você já ouviu falar file growth, ou simplesmente crescimento de arquivo de dados ou log? Se você é um administrador de banco de dados, ou um profissional que já trabalha a algum tempo com o banco de dados, tenho a certeza que já deve ter ouvido falar sobre a importância de se saber como esta configurado o fator de crescimento de um banco de dados e seu arquivos de transações.

Trata-se de uma configuração que pode ser aplicada durante a criação de um banco de dados ou posteriormente, sua importância esta totalmente relacionada ao espaço de armazenamento de dados durante sua utilização, o que poderá impactar na capacidade física de uma unidade de disco em gerenciar o quanto estes arquivos podem consumir e alocar espaço em disco no decorrer do seu tempo de vida.

Ao definir a forma de crescimento ou até mesmo o quanto este arquivo poderá ou não crescer de forma ilimitado o Microsoft SQL Server vai trabalhar no processo de alocação, escrita e manipulação da estrutura física e lógica tanto para os arquivos de dados, como principalmente para os arquivos de log.

Justamente sendo estes os arquivos que normalmente consomem um grande espaço física das unidades de disco para catalogar todas as operações processadas em um banco de dados que devem ser registradas em sua estrutura.

Para este tipo de cenário os gerenciadores de banco de dados através de seu mecanismo de Storage Engine observam e monitoram o que esta sendo processado e armazenado dentro de cada arquivo, caso o mesmo tenho que crescer para alocar uma nova área é com base nas configurações de File Growth definidas para o respectivo arquivo que este crescimento poderá ser realizado em fatores de Kilobytes, Megabytes, Gigabytes ou até mesmo em valores de porcentagem.

#10 Para que serve – Obtendo informações sobre database filegrowth —

Agora que conhecemos um pouco que esta relacionada com este post, vamos então conhecer este script que poderá nos ajudar a obter todas as possíveis informações relacionadas ao fator de crescimento de nossos bancos de dados e suas respectivas estruturas de dados e log.

— Bloco de Código —

filegrowth

Muito bem, observe que este código é bastante simples, estamos basicamente fazendo uso das catalogs views existentes no Microsoft SQL Server desdes suas primeiras versões o que nos permite dizer que este bloco de código pode ser aplicado facilmente a partir da versão 2005 em qualquer nível de edição, além disso, o mesmo já foi testado e aprovado nas últimos duas edições 2014 e 2016.

Após executarmos o bloco de código apresentando anteriormente, o Management Studio deverá retornar um conjunto de colunas e valores similares ao apresentado na Figura 1 apresentada abaixo:

filegrowth1Figura 1 – Relação de bancos de dados e informações sobre o filegrowth.

Podemos notar a existência das colunas AutoGrowthStatus, GrowthValue e GrowthIncrement, são justamentes estas as colunas que nos permitem encontrar as informações relacionadas aos fatores de crescimento configurados para cada banco de dados armazenado em nosso servidor ou instância de bancos de dados Microsoft SQL Server.

Falando um pouco sobre estas três colunas é possível observar:

AutoGrowthStatus: Esta coluna apresenta o status da propriedade Auto Growth, sendo esta definida para informar e o arquivo deverá ou não crescer de forma automática.

GrowthValue: Apresenta que pode ser informado a partir de 0 (zero) que indica ao Microsoft SQL Server que o determinado banco de dados não deverá crescer. Os demais valores podem representar uma indicação de crescimento em tamanho fixo ou até mesmo em porcentagem.

GrowthIncrement: Mostra a forma de incremento do fator de crescimento do banco de dados, sendo orientado e calculado através do número de páginas de dados, se o valor apresentado for igual á 0 (zero) significa que este banco de dados não terá seu crescimento realizado, qualquer outro valor acima de 0 (zero) significa que este banco de dados será impactado em algum momento pelo valor definido nas configurações do crescimento do banco de dados. Vale ressaltar que este valor esta relacionado ao tamanho de 8Kb (Kilobytes) para cada página de dados.

Após esta análise posso dizer que fica mais fácil descobrir qual banco de dados poderá apresentar problemas de crescimento acima no normal ou simplesmente aquele banco de dados que necessita crescer além do estimado.

Referências

https://technet.microsoft.com/pt-br/library/ms181338(v=sql.110).aspx

https://msdn.microsoft.com/en-us/library/ms178534.aspx

https://msdn.microsoft.com/en-us/library/bb522469.aspx

Links

Caso você ainda não tenha acessado os posts anteriores desta sessão, fique tranquilo é fácil e rápido, basta selecionar uns dos links apresentados a seguir:

https://pedrogalvaojunior.wordpress.com/2016/08/06/07-para-que-serve/

https://pedrogalvaojunior.wordpress.com/2016/08/06/07-para-que-serve/

Conclusão

Administrar um banco de dados não é uma tarefa das mais complicadas do mundo, mas quando se referimos em administratar um servidor de banco de dados ou conjunto de servidores de bancos de dados o cenário com certeza muda bastante.

Foi pensando neste tipo de situação que compartilhei com vocês hoje este script no #10 – Para que serve, que apresenta como podemos de maneira fácil, rápida, segura e muito prática encontrar informações relacionadas ao file growth, ou simplesmente fator de crescimento.

Considerada uma das configurações mais importantes de um qualquer banco de dados alocado em uma instância ou servidor Microsoft SQL Server.

Agradecimentos

Mais uma vez obrigado por sua visita, agradeço sua atenção, fique a vontade para enviar suas críticas, sugestões, observações e comentários.

Até mais.

Entendendo o comportamento de Trigger DML Instead Of no Microsoft SQL Server 2008 R2 e 2012.


Salve, Salve Comunidade, bom dia.

Hoje vou falar um pouco sobre Trigger DML, não estou me referindo a Trigger de For ou After, na verdade quero compartilhar com vocês a minha experiência com o Trigger DML Instead O, recurso que eu particularmente utilizei muito pouco nestes longos anos de carreira profissional.

Mas antes de destacar o Trigger DML Instead Of, vou abordar um sobre o Trigger, recurso que eu gosto muito e bem implementado pode se tornar um mecanismo de automatização de procedimentos e processos muito útil.

 

 

Introdução

Considerado como um dos mecanismos primários para fazer cumprir as regras empresariais e a integridade dos dados. O Trigger(Gatilho) é um tipo especial de procedimento armazenado que automaticamente entra em funcionamento quando um evento de linguagem é executado. O SQL Server inclui três tipos gerais de gatilhos: gatilhos DML, disparadores DDL, e gatilhos de logon.

Conhecendo um pouco mais sobre Triggers

Todo e qualquer trigger possui alguns disparados, tanto para transações DDL, como também, para transações DML. Os disparadores DDL são invocados quando um evento de linguagem de definição de dados (DDL) ocorre no servidor ou no banco de dados. Os Triggers DML, são invocados quando ocorre um evento de manipulação de definição de dados (DML) no banco de dados. Eventos DML incluem instruções INSERT, UPDATE ou DELETE, que modificam os dados em uma tabela especificada ou exibição.

Um Trigger DML pode examinar outras tabelas e incluir instruções Transact-SQL complexas. O gatilho e a instrução acionados são tratados como uma transação simples, que pode ser revertida dentro do gatilho. Se um erro grave for detectado (espaço em disco insuficiente, por exemplo), toda a transação será revertida automaticamente.

Triggers DML

Os Triggers DML apresentam diversas utilidades no que se relaciona a Integração de Dados e Automatização de Transações em um Banco de Dados, dentre elas, destaco:

Podemos colocar em cascata as alterações pelas tabelas relacionadas no banco de dados; no entanto, essas alterações podem ser executadas com mais eficiência com o uso das restrições de integridade referencial em cascata.

Podemos proteger contra operações mal intencionadas ou incorretas do tipo INSERT, UPDATE, e DELETE, e fazer cumprir as outras restrições mais complexas do que aquelas definidas nas restrições CHECK.

Diferentemente das restrições CHECK, os gatilhos DML podem fazer referência a colunas em outras tabelas. Por exemplo, um gatilho pode usar um SELECT de outra tabela para comparar com os dados atualizados ou inseridos e para efetuar ações adicionais, como modificar os dados ou exibir uma mensagem de erro definida pelo usuário.

  • Podem avaliar o estado de uma tabela antes e depois da modificação dos dados e efetuar ações com base nessa diferença.
  • Vários gatilhos DML do mesmo tipo (INSERT, UPDATE, ou DELETE), em uma tabela, permitem que múltiplas ações diferentes ocorram em resposta à mesma instrução de modificação.

Tipos de Triggers DML

Implementados desde a versão 2000 o Microsoft SQL Server, apresenta basicamente três tipos de Triggers para Transações DML, conforme apresento abaixo:

After: Um Trigger AFTER pode executado depois que ação das instruções INSERT, UPDATE ou DELETE for executada. Especificar AFTER é o mesmo que especificar FOR, que é a única opção disponível em versões anteriores do Microsoft SQL Server. Os gatilhos AFTER podem ser especificados somente em tabelas.

Instead Of: Um Trigger INSTEAD OF pode ser executado no lugar da ação de gatilho usual. Os triggers INSTEAD OF também podem ser definidos em exibições com uma ou mais tabelas, na quais seja possível estender os tipos de atualizações que uma exibição pode suportar.

CLR: Um Trigger CLR pode ser um trigger AFTER ou INSTEAD OF. Um Trigger CLR também pode ser um disparador DDL. Em vez de executar um procedimento armazenado Transact-SQL, um Trigger CLR executa um ou mais métodos gravados em código gerenciado que são membros de um assembly criado no .NET Framework e carregado para o SQL Server.

Pois bem, após esta breve introdução sobre Trigger, vou destacar o Trigger DML Instead Of, ou chamado em Português Gatilho Em Vez, tradução que não posso dizer que é ruim pois não sou um profundo conhecer de Inglês, mas sei que fica muito complicado de se utilizar este tipo de recurso com esta tradução.

Estudo de Caso

Para o nosso Estudo de Caso, pensei em algum bastante simples e que possa facilitar ainda mais o entendimento e forma de uso do Trigger DML Instead Of, sendo assim, vamos criar um ambiente fictício de uma Escola. A Escola possui um pequeno sistema de CRUD que esta apresentando algumas falhas básicas, dentro elas, a falha para o cadastramento de um novo aluno, quando o Sistema retorna a Mensagem de Violation Primary Key(Violação de Chave Primária).

Preparando o Ambiente

Para começarmos a brincadeira, vamos montar um simples ambiente, criando um novo Banco de Dados, denominado: MySchool.

Após a criação do Banco de Dados, o próximo é criar a tabela que vamos utilizar como recurso para vincular nosso Trigger DML Instead Of, vamos chamar esta Table de TBStudents, conforme o Bloco de Código, denominado Código 1, apresentado abaixo:

— Código 1 – Criação da Table TBStudents –

Create Table TBStudents

(Id Int Primary Key,

Name VarChar(60),

Status Char(1) Default ‘A’)
Go

 

A TBStudents será a base para trabalharmos com a nossa massa de dados, bem como, para implementarmos o Trigger DML Instead OF, neste caso, vamos realizar a inserção da massa de dados, apresentada no Bloco de Código, denominado Código 2, apresentado a seguir:

 

— Código 2 – Inserindo a Massa de Dados na Table TBStudents –

Insert Into TBStudents (Id, Name, Status)

Values (1, ‘Pedro LeroLero Junior’,’A’),

(2, ‘Eduardo LeroLero’,’A’),

(3, ‘Fernanda LeroLero’,’A’),

(4, ‘João Pedro LeroLero’,’A’),

(5, ‘Maria Luíza LeroLero’,’I’),

(6, ‘Joaquim LeroLero’,’I’),

(7, ‘Pedro LeroLero’,’I’),

(8, ‘Dora LeroLero’,’I’),

(9, ‘Marcio LeroLero’,’A’)

Go

Insert Into TBStudents (Name, Status)

Values (10, ‘José ShortCut’,’I’),

(11, ‘Cjico ShortCut’,’A’),

(12, ‘Fernando ShortCut’,’A’),

(13, ‘Jorge ShortCut’,’F’),

(14, ‘Kurumbu YooLong’,’E’),

(15, ‘Kurumbu Kim YooLong’,’E’),

(16, ‘Kum Shi Hum’,’G’),

(17, ‘Long Long Long’,’G’),

(18, ‘Cut Chu Cjut’,’M’)

Go

 

A massa de dados foi criada e inserida na Tabela TBStudents, mas até o presente momento não fizemos uso do Trigger. Você pode notar que durante o processo de inserção dos dados, foram informados manualmente os Ids de cada estudante, como destacado anteriormente o Sistema utilizado pela Escola esta apresentando algumas falhas, dentre elas, no processo de cadastramento de novos alunos.

 

Dando continuidade vamos criar uma nova Table denominado TBStudentsLog, que será utilizada em conjunto com o nosso Trigger, como um recurso para Auditoria e Histórico de Transações, para isso vamos utilizar o Bloco de Código, denominado Código 3, apresentado a seguir:

 

 

— Código 3 – Criando a Table TBStudentsLog —

Create Table TBStudentsLog

(CodEvent Int Primary Key Identity(1,1),

Description Varchar(60),

CodeError Int,

Data Varchar(200),

IDCorreto Int)

Go

 

Observe que esta table será capaz de armazenar o Código do Evento, a Descrição, o Código do Erro e os dados que estavam sendo manipulados no momento que a transação DML estava sendo processada.

Utilizando o Trigger DML Instead OF

 

Vamos imaginar que a pessoa responsável em realizar o Cadastro do próximo aluno não anotou o número do último ID inserido na Ficha de Alunos, no nosso caso, corresponde ao número 18. Com isso, o próximo número obrigatoriamente será o número 19, mas como é de seu conhecimento este número não foi anotado, desta forma, ao executar o Código 4, o SQL Server vai nos retornar a mensagem de erro:

 

Msg 2627, Level 14, State 1, Line 1

Violation of PRIMARY KEY constraint ‘PK__TBStuden__3214EC0760FC61CA’. Cannot insert duplicate key in object ‘dbo.TBStudents’.

The statement has been terminated.

 

Justamente este o próximo passo que vamos simular aqui e posteriormente com o nosso Trigger, capturar o código das informações sobre o erro que o Microsoft SQL Server esta apresentando, bem como, e quais os dados que estão sendo afetados. Para tal situação, vamos utilizar o Bloco de Código, denominado Código 4, apresentado abaixo:

 

 

— Código 4 – Simulando a Falha no Cadastro de um novo aluno – Violation Primary Key —

Insert Into TBStudents (Id, Name, Status)

 

Values (18, ‘Fuji Hum Shi’, ‘P’)

Go

 

Esta é a nossa situação neste momento, agora pense se todas as vezes que um novo aluno for ser cadastrado e ocorra uma violação de Chave Primária, não sabermos os dados que estão sendo manipulados!

 

É nesta situação que o Trigger DML Instead OF pode ser utilizado com um recurso chave, algo que poderá ajudar em muito as atividades de manutenção do sistema nas funcionalidades que ele esta apresentando falha. Sendo assim, o nosso próximo passo é realizarmos a criação do nosso Trigger denominado MyTriggerInsteadOF, com base, no Bloco de Código 5, apresentado abaixo:

 

— Código 5 – Criando a Trigger DML Instead Of – MyTriggerInsteadOF –

Create Trigger MyTriggerInsteadOf

ON TBStudents

INSTEAD OF INSERT

AS

Begin

Set NoCount On

 

IF EXISTS (SELECT a.id FROM inserted AS a INNER JOIN TBStudents AS b ON a.id = b.id)

BEGIN

RAISERROR(50010, 16, 1, ‘Registro já existe!’)

 

Declare @Data Varchar(200)

 

Set @Data = (Select CONVERT(Varchar(5), Id) + ‘ – ‘ + [Name] + ‘ – ‘ +  [Status] From inserted)

 

Insert Into TBStudentsLog(Description, CodeError, Data, IDCorreto)

Values(‘Violation Primary Key’,2627,@Data, (Select MAX(ID)+1 from TBStudents))

End

End

 

Logicamente se fizermos uma análise poderíamos tornar o código mais automatizado e até mesmo inteligente, mas por questões de funcionalidades e por estar trabalhando com o Trigger DML Instead Of, onde o trigger é processado antes da confirmação da transação que o disparou, fica um pouco mais complicado obter alguns dados como mensagem de erro, código de erro, entre outros elementos que poderiam ser utilizados através de Funções de Tratamento de Erro.

 

Com este Trigger implementado, todas as ocorrências que ser realizem ao Código de Erro 2627 que representa a Violation Primary Key, serão armazenadas na Table TBStudentsLog, regristando os dados que estavam envolvidos na Inserção incluindo o ID que deveria ser utilizado para inserir os dados.

 

Outro detalhe importante, com este tipo de implementação o SQL Server não irá levantar nenhuma mensagem de erro o que poderá evitar qualquer tipo de situação desagradável para os usuário e sim uma mensagem de erro mais amigável.

 

Desta forma vou encerrar mais este post, acredito que de forma muito simples e prática consegui apresentar e ilustrar uma forma que podemos utilizar este tipo de Trigger.

 

Mais uma vez obrigado, por sua visita.

 

Nos encontramos em breve.

 

Até mais.

Microsoft SQL Server 2008 – Build List


Pessoal, bom dia.

Tudo bem?

Nós ultimos dias estou realizando uma série de eventos da região e me deparei com diversas perguntas sobre as versões do SQL Server 2008 em relação a númeração apresentada no Management Studio, ou através do comando: Select @@Version

Pois bem, com objetivo de ajudar a todos que por algum motivo não conseguem identificar e entender qual Versão, Service Pack e Hotfixs esta utilizando, apresento abaixo a atualmente sequencial de Builds disponíveis para o SQL Server 2008 RTM até o Service Pack 3.

Gostaria de agradecer o amigo Steve Jones, um dos maiores profissionais do mundo em SQL Server que constantemente disponibiliza e relação completa e atualizada de Build List, conforme o link: BuildList_SQLServer2008.

Microsoft SQL Server 2008 – Services Packs:

Versão Build KB Artigo
Service Pack 3 for SQL Server 2008 10.0.5500 2546951
Service Pack 2 for SQL Server 2008 10.0.4000.00 968369
Service Pack 1 for SQL Server 2008 10.0.2531.00 968369
RTM 10.0.1600.22 N/A

Recentemente a Microsoft liberou a Service Pack 3 para o SQL Server 2008, evoluíndo o número da versão para 10.00.5500, o que corresponde ao Build: 10.00.5500.

O Build é um termo utilizado na área de Desenvolvimento de Softwares que corresponde ao número da construção e liberação do produto:

Builds KB Artigo Título Descrição
10.00.5500 2546951 SQL Server 2008 Service Pack 3 SP3
10.00.4321.0 2582285 SQL Server 2008 SP2 Cumulative Update 6 CU #6 for SQL Server 2008 SP2. Fixed include SSRS and MDX query issues, a few replication bugs, and a few database engine issues with compression and sparse files.
10.00.4316.0 2582285 SQL Server 2008 SP2 Cumulative Update 5 CU #5 for SQL Server 2008 SP2. Fixed include issues with the data collector, replication issues with stored procedures and CDC backups. among others.
10.0.4285.00 2527180 SQL Server 2008 SP2 Cumulative Update 4 CU#4 for SQL Server 2008 Service Pack 2. Fixes include issues with Filestream, various T-SQL issues and some SSIS items among others.
10.0.4279.00 2498535 SQL Server 2008 SP2 Cumulative Update 3 CU#3 for SQL Server 2008 Service Pack 2. Fixes include issues with Merge replication, mirroring suspension issues, various T-SQL issues among others.
10.0.4272.00 2467239 SQL Server 2008 SP2 Cumulative Update 2 CU#2 for SQL Server 2008 Service Pack 2. Fixes include recovering LOB pages from failed inserts, custom resolver issues in replication, and issues with online index rebuilds among others.
10.0.4266.00 2289254 SQL Server 2008 SP2 Cumulative Update 1 The first CU after SQL Server 2008 Service Pack 2.
10.0.4000.00 2285068 SQL Server 2008 SP2 The second service pack for SQL Server 2008.
10.00.2850.0 2582282 Cumulative Update 16 for SQL Server 2008 SP1 CU #16 for SQL Server 2008 SP1. Fixed include SSRS and MDX query issues, a few replication bugs, and a few database engine issues with compression and sparse files.
10.0.2847.00 2527187 Cumulative Update 15 for SQL Server 2008 SP1 The 15th rollup of patches for Service Pack 1. Fixes include issues with the data collector, replication issues with stored procedures and CDC backups. among others.
10.0.2821.00 2527187 Cumulative Update 14 for SQL Server 2008 SP1 The 14th rollup of patches for Service Pack 1. Fixes include backup issues, Browser issues, and various other fixes.
10.0.2816.00 2497673 Cumulative Update 13 for SQL Server 2008 SP1 The 13th rollup of patches for Service Pack 1. Fixes include mirroring issues, Agent scheduling issues, and various T-SQL fixes.
10.0.2808.00 2467236 Cumulative Update 12 for SQL Server 2008 SP1 The 12th rollup of patches for Service Pack 1. Fixes include clustering IPv6 problems, join performance fixes, and SSAS crashes.
10.0.2804.00 2413738 Cumulative Update 11 for SQL Server 2008 SP1 The 11th rollup of patches for Service Pack 1. Fixed include fixes for too many VLFs during recovery, MDX issues in BIDS, and a few analysis services fixes.
10.0.2799.00 2279604 Cumulative Update 10 for SQL Server 2008 SP1 The tenth rollup of patches for Service Pack 1.
10.0.2789.00 2083921 Cumulative Update 9 for SQL Server 2008 SP1 The ninth rollup of patches for Service Pack 1.
10.0.2775.00 981702 Cumulative Update 8 for SQL Server 2008 SP1 The eighth rollup of patches for Service Pack 1.
10.0.2766.00 979065 Cumulative Update 7 for SQL Server 2008 SP1 The sixth rollup of patches for Service Pack 1.
10.0.2757.00 977443 Cumulative Update 6 for SQL Server 2008 SP1 The sixth rollup of patches for Service Pack 1.
10.0.2746.00 975977 Cumulative Update 5 for SQL Server 2008 SP1 The fifth rollup of patches for Service Pack 1.
10.0.2734.00 973602 Cumulative Update 4 for SQL Server 2008 SP1 The fourth rollup of patches for Service Pack 1.
10.0.2723.00 971491 Cumulative Update 3 for SQL Server 2008 SP1 The third rollup of patches for Service Pack 1.
10.0.2714.00 970315 Cumulative Update 2 for SQL Server 2008 SP1 The second roll-up of patches for Service Pack 1.
10.0.2710.00 969099 Cumulative Update 1 for SQL Server 2008 SP1 The first roll-up of patches for Service Pack 1. Includes CU4 patches for RTM that didn’t make it in SP1.
10.0.2531.00 968369 Service Pack 1 for SQL Server 2008 SP1
10.0.1835.00 979064 Cumulative Update 10 for SQL Server 2008 The tenth rollup of patches for SQL Server 2008 RTM.
10.0.1828.00 977444 Cumulative Update 9 for SQL Server 2008 The 9th roll-up of patches for SQL Server 2008 RTM.
10.0.1823.00 975976 Cumulative Update 8 for SQL Server 2008 The 8th roll-up of patches for SQL Server 2008 RTM.
10.0.1818.00 973601 Cumulative Update 7 for SQL Server 2008 The 7th roll-up of patches for SQL Server 2008 RTM.
10.0.1812.00 971490 Cumulative Update 6 for SQL Server 2008 The 6th roll-up of patches for SQL Server 2008 RTM.
10.0.1806.00 969531 Cumulative Update 5 for SQL Server 2008 The 5th roll-up of patches for SQL Server 2008 RTM.
10.0.1798.00 963036 Cumulative Update 4 for SQL Server 2008 The fourth roll-up of patches since the RTM version.
10.0.1787.00 960484 Cumulative update package 3 for SQL Server 2008 The third roll-up of patches since the RTM version.
10.0.1779.00 958186 Cumulative update package 2 for SQL Server 2008 The second roll-up of patches since the RTM version.
10.0.1763.00 956717 Cumulative update package 1 for SQL Server 2008 The first roll-up of patches since the RTM version.
10.0.1755.00 957387 FIX: No records may be returned when you call the SQLExecute function to execute a prepared statement and you use the SQL Native Client ODBC Driver in SQL Server 2008
10.0.1600.22 RTM The first public, supported version of SQL Server 2008