quarta-feira, 7 de novembro de 2012

Introdução a VIEW


A frase importante desta postagem é: VIEW  é uma tabela virtual. Ela não passa de um objeto que armazena a pesquisa definida em sua declaração que é invocada toda a vez que ela é referenciada. Sua utilização se restringe a proteger os dados das tabelas onde um usuário final não precisa saber os valores de colunas importantes como remuneração.

Como isso funciona?

              Em um banco de dados onde existam informações sigilosas que nem mesmo os desenvolvedores possam ter acesso, o administrador do banco de dados irá conceder permissões para este grupo de acesso as VIEWs que somente apresentarão os dados que são permitidos dando condições aos desenvolvedores de realizar o trabalho sem expor os dados secretos.

Obs: Outra utilização interessante é deixar o entendimento do negócio de atuação mais claro abstraindo a parte técnica do banco evidenciando os processos que de fato é o que importa para uma empresa.

Criando uma VIEW

    CREATE VIEW vw_pesquisa1
    AS
    SELECT Coluna1, Coluna2 FROM BANCO.dbo.Tabela

Deletando uma VIEW

    DROP VIEW vw_pesquisa1

               Tenha em mente que usar uma simples VIEW jamais irá deixar a sua consulta mais performática. Para ganhar desempenho em uma pesquisa uma VIEW somente será benéfica se for utilizada juntamente com outros artifícios como materializar a VIEW e criar um índice. Mas isso já é um assunto para uma outra postagem...

quarta-feira, 31 de outubro de 2012

Volta das Férias


Pessoal,

               Estava de férias e fiquei completamente fora do blog. Mas isso é passado e agora esta mais do que na hora de dominar de uma vez por todas essa certificação 70-461! Semana que vem continuo com os conteúdos da prova!

quarta-feira, 3 de outubro de 2012

CREATE DROP TABLE


Boa Noite Senhoooores,

               Hoje irei falar sobre o CREATE TABLE e o DROP TABLE. Você pode criar ou deletar uma tabela dando alguns clicks no Object Explorer ou optar por fazer um pequeno script SQL. Independente de sua escolha saber a sintaxe desses comandos é uma obrigação!

DROP TABLE exemplo            --Deletar uma tabela

CREATE TABLE exemplo (        --Criar uma tabela
      Coluna1           INT
)

               Para deletar uma tabela não tem muita conversa é o comando e pronto. Ele serve tanto para as tabelas materializadas como para as temporárias. Pode-se(e eu recomendo) que sempre se utilize do nome completo da tabela colocando o nome do DATABASE e do SCHEMA.

               Já com o CREATE TABLE a conversa é bem mais complicada. Existem várias possíveis definições onde se pode especificar ate mesmo a capacidade do nó folha da estrutura de armazenamento da tabela. Aqui eu irei comentar apenas o básico.

Quando declaramos uma tabela definimos também as suas colunas. Além do tipo de dado da coluna pode-se especificar se ela aceita valores NULL, o seu valor DEFAULT e o seu incremento.

CREATE TABLE exemplo ( 
      ColunaNaoNula     INT   NOT NULL
,     ColunaComDefault  INT   DEFAULT(0)
,     ColunaIncremento  INT   IDENTITY(1,1)
,     ColunaEx1         INT   NOT NULL DEFAULT(0)
)

As seguintes regras devem ser respeitadas:

NULL: Por padrão as colunas são definidas aceitando NULL. Para mudar isso coloque NOT NULL após a declaração do seu tipo de dado. Uma vez que a coluna é definida como NOT NULL essa regra será validada em qualquer inserção ou alteração de registro e se a informação que se deseja salvar for nula o SQL Server não irá aceitar.

DEFAULT: A coluna somente assumirá esse valor default se na sua inserção/atualização essa coluna não for informada. Caso seja informado valor nulo, será salvo o valor nulo.

IDENTITY: Só pode existir uma única coluna na tabela com essa propriedade. Não pode ter o seu valor informado em um INSERT ou um DELETE pois quem vai controlar seu valor é a própria tabela  e ele não pode ser combinado com nenhuma outra propriedade. O primeiro número informa qual será o valor de partida desta contagem ao passo que o segundo informa de quanto em quanto esse número é incrementado.

quarta-feira, 12 de setembro de 2012

Comunicado


Boa Noite Senhoooores!!

               Como a ideia deste blog é ser um guia definitivo para certificações em SQL Server criei uma nova área que é a “Guia de Provas”. Nela irei colocar todos os conteúdos dos exames que consta no site da Microsoft e logo ao lado de cada tópico constará o link para um post no blog que aborde o tema. Acredito que seguindo esta organização a experiência de quem visita o site vai ser de escolher o que quer ler e ir direto ao ponto!

quinta-feira, 6 de setembro de 2012

Prova Marcada!!


Boa Noite Senhooooores!!!

               Agora é oficial! Agendei a minha prova para este mês de setembro e ainda com um desconto bacana da Microsoft! Neste link você consegue um voucher para todas as provas do MCSA em SQL Server 2012 com 15% de desconto e todas as provas com Second Shot(caso não passe na prova de primeira, você pode fazer ela de novo sem pagar nada mais por isso!).

               Vou aumentar a minha carga horaria de estudos, já que estou na reta final, e para isso segue um blog que irei ler por completo com o resumo de tudo o que será cobrado na prova.

               Mudando de assunto, estava eu na firma fazendo uma pesquisa e utilizei o PIVOT que é conhecido por transformar linhas em colunas. Existe uma grande expectativa neste cara mas desde a sua criação ele ainda não convenceu devido as suas limitações(saber previamente as colunas no resultado final). Um caso bastante comum de utilizar este cara é para fazer um somatório mensal de várias categorias:

SELECT            Title
,                 [1]
,                 [2]
,                 [3]
,                 [4]
,                 [5]
,                 [6]
,                 [7]
,                 [8]
,                 [9]
,                 [10]
,                 [11]
,                 [12]
FROM        (
      SELECT            Title
      ,                 EmployeeID
      ,                 qtd               = MONTH(BirthDate)
      FROM              [AdventureWorks].[HumanResources].[Employee]   E
) x
PIVOT ( COUNT(EmployeeID) FOR qtd IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) AS pvt

               Por mais que eu não goste de usar o PIVOT, vez ou outra p/ relatório ele é uma boa saída.  Fica aí o exemplo e mesmo que existam outras maneiras de se fazer esse somatório, usar o PIVOT deixa com que o SQL se preocupe com a melhor maneira de recuperar os dados que geralmente costuma ser a saída mais performática!

quarta-feira, 29 de agosto de 2012

DATA TYPE PRECEDENCE


Faaaala pessoal,

               Continuando a ideia de precedência do post anterior hoje irei comentar um pouco sobre as conversões implícitas. Quando estamos realizando operações entre mais de um campo, tipicamente em uma consulta, pode acontecer de que os tipos de dados das colunas sejam diferentes. Neste caso, pode acontecer também que o desenvolvedor, aspirante a DBA, esqueça de fazer a conversão:

               SELECT      1 + '2'

               E aí? Qual será o resultado? Vai dar erro? Bom, esse peguinha é mais rodado do que pratinho de micro-ondas. O que acontece é que no SQL existe uma ordem DATA TYPE PRECEDENCE que converte implicitamente a coluna de menor precedência para a de maior. 

               

Confuso não? Essa matriz esta na documentação da MSDN do CAST e do CONVERT, mas resumindo e colocando os tipos mais comuns temos a seguinte fila:

BINARY < CHAR < VARCHAR < TIMESTAMP < TEXT < BIT < TINYINT < SMALLINT < INT < BIGINT < SMALLMONEY < MONEY < DECIMAL < SMALLDATETIME < DATETIME < XML

            Onde o BINARY possui a menor precedência e o XML a maior. Vale lembrar que quando os tipos de dados não são compatíveis (converter um BIT p/ XML) o SQL vai cuspir um erro de conversão. E se a conversão implícita não é a desejada, pode-se explicitar para atender a sua regra de negocio. Em minha opinião tente fugir de conversões, mas se tiver de fazer, sempre faça explicitamente!

           Link p/ a precedência completa.

            Exame 70-461: Caros, terminei o curso da Microsoft essa semana e agora chegou a hora de marcar a prova. Após esta publicação irei cuidar deste assunto!

quarta-feira, 22 de agosto de 2012

Ordem Lógica de Execução


Boa Noite Senhoreeeees!!

                Hoje já estou em um pouco mais da metade do curso preparatório para o exame 70-461, o primeiro passo para ser um MCSA da Microsoft em SQL Server 2012. As minhas impressões são de que se você já trabalha com pesquisas e se aprofundou um pouco mais sabendo bem as diferenças entre os OUTER’s , usando CTE’s, agrupamento e TRY CATCH provavelmente você já esta preparado para fazer o exame. Mas certeza mesmo eu só terei depois de prestar o exame o que deve ser em breve!
                Uma informação que eu achei legal é sobre a ordem de execução de uma Query. Chamada de Logical Query Processing Phase o SQL Server processa uma pesquisa na ordem descrita abaixo:


                Diferente do senso comum de achar que o código é executado tudo de cima para baixo, saber essa ordem explica o fato de você poder referenciar ALIAS de colunas na clausula ORDER BY e não poder utilizar no GROUP BY pois segundo esta ordem o SQL ainda não passou pela fase de projeção que é o SELECT.