Dica do Mês – Utilizando a não documentada system view – SPT_Values

Buenas tardes….. Salve amantes de Banco de Dados!

Hoje terça – feira, estamos chegando ao final do mês de Fevereiro, estou aproveitando minhas férias no Flextronics Instituto de Tecnologia para descansar, renovar as minhas energias, cuidar dos meus filhos, esposas, enfim da minha vida, mas mantendo a minha missão e prazer em se aperfeiçoar cada vez mais em relação ao SQL Server e o mundo de Banco de Dados. Além disso, também tenho que manter vivo o meu blog, cuidando com carinho dos meus quase 2.000 seguidores, fazendo com eles não se sintam sozinhos ou desamparados(kkkkk).

Como eu destaquei no primeiro post desta sessão ao final de cada mês vou compartilhar com vocês uma pequena dica, levando-se em consideração os posts que sempre estou respondendo quase que diariamente nos Fóruns de SQL Server, como também, as dúvidas dos meus alunos, clientes e amigos de trabalho.

Seguindo este caminho uma das dúvidas que me chamou a atenção recentimente foi o questionamento que um aluno me fez referente a alguns recursos do Microsoft SQL Server que não estão documentados no Books On-Line, dentro eles a System View SPT_Values, isso mesmo se você nunca ouvi falar existem também alguns visões de sistemas presente no SQL Server não documentadas por parte da Microsoft.

Como costumo dizer para meus filhos, missão dada é missão cumprida! Neste caminho, lá vou eu, melhor dizendo lá eu fui….pela estrada a fora da internet pesquisando, consultando até encontrar mais informações para complementar o meu conhecimento em relação a esta system view, que sinceramente eu já tinha ouvido falar em meados de 2009, mas acredito que utilizei uma ou duas vezes sem saber exatamente como fazer uso.

Em algumas pesquisas na internet encontrei informações que indicam que esta visão de sistema é bastante antiga e esta presente no SQL Server desde as primeiras versões desenvolvidas inicialmente pela Sybase, conforme este link destaca: http://infocenter.sybase.com/archive/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag126.htm

Particularmente eu já fiz isso desta visão, que possui algumas características interessantes:

  • Apresenta uma relação de 2523 linhas de registro que podem variar entre versões distintas do SQL Server;
  • Contem uma coluna denominada Number que armazena uma sequência de números de 0 até 2047;
  • Visão de sistema armazenada fisicamente no banco de dados Master; e
  • Considera como uma tabela auxiliar para geração de números ou cálculos matemáticos.

A Figura 1 apresentada abaixo ilustra a estrutura lógica da system view SPT_Values:

SystemView-SPT_Values
Figura 1 – Estrutura lógica da system view spt_valeus.

Dentre as principais formas de uso desta system view, algumas são bastante recorrentes e importantes para o profissionais de desenvolvimento:

  1. Análise de uma sequência de caracteres;
  2. Identificar falhas em sequências numéricas geradas através da proprieda Identity;
  3. Facilidade na geração de sequências de datas ou dados fictícios;
  4. Possibilidade de criação de ordenação e organização de dados de forma aleatória ou randômica.

Muito interessante todas estas possibilidades que este recurso tão escondido e presenta a anos pode oferecer e facilitar nossas vidas, desta forma, vou apresentar alguns exemplos de como podemos fazer uso desta system view.

 


Exemplos:

— 1 – Cálculando o fatorial de um número —

Declare @n int, @result float

Select @n = 4,@result=1

Select @result = @result * number From Master..spt_values

Where Type=‘p’ And Number Between 1 And @n

Select @result

Go

 

— 2 – Realizando a seperação de palavras —

DECLARE @var VARCHAR(100)

SET @var = ‘Conhecendo, cada, vez, mais, os segredos, do SQL Server…..’

SELECT

SUBSTRING (‘,’ + @var + ‘,’,Number + 1,CHARINDEX(‘,’,‘,’ + @var + ‘,’,Number + 1) Number 1) as value

FROM master..spt_values

WHERE Number >= 1

AND Number < LEN(‘,’ + @var + ‘,’) 1

AND SUBSTRING(‘,’ + @var + ‘,’, Number, 1) = ‘,’

AND type = ‘P’

ORDER BY Number

 

 Go

 

— 3 – Gerando um calendário mensal em tempo de execução, com base, no mês atual —

Select dateadd(month,datediff(month,0,getdate()),0) + number

from master..spt_values n with (nolock)

where number between 0 and day(dateadd(month,datediff(month,-1,getdate()),0) 1) 1 and type = ‘p’

Go

 

— 4 – Listando todas as horas de um dia, com base, na data atual —

Select dateadd(hour,number,dateadd(day,datediff(day,0,getdate()),0))

from master..spt_values n with (nolock)

where number between 0 and 23 and type = ‘p’

Go

 


 

 

Sensacional, quantas diversas possibilidades, maneiras e formas de utilização podem ser utilizadas com a system view SPT_Values, realmente fica complicado entender o porque a Microsoft não da suporte a documentação deste recurso, mas podemos pensar e considerar que por se tratar de recurso antigo oriundo da Sybase a Microsoft entenda que seja necessário recomendável elaborar uma documentação e ser adicionada ao Books On-Line. Mas vamos em frente, quem sabe no futuro isso possa mudar, pois existem muitas outras funcionalidades, comandos, stored procedures e recursos que a Microsoft também não esta documentando.

Deixando isso de lado, vou encerrar mais esta dica, espero e tenho a certeza que você gostou deste post, torço para que esta dica possa lhe trazer diversas possibilidades de utilizar este recurso, use sua imaginação e conhecimento com o SQL Server para encontrar outras maneiras de consumir e se aproveitar desta system view.

Mais uma vez obrigado, agradeço a sua visita, deixe sua crítica, sugestão, comentário e também contribua apresenta uma outra maneira que você já utilizou ou imagina que podemos utilizar a System Views SPT_Valeus.

Nos encontramos no próximos mês, com mais uma dica do mês.

Até lá.

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.

2 comentários em “Dica do Mês – Utilizando a não documentada system view – SPT_Values”

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