SlideShare ist ein Scribd-Unternehmen logo
1 von 86
Downloaden Sie, um offline zu lesen
Apostila de MS SQL Server

Pág.: 1 / 86

Conceitos

O que é um Banco de Dados?
Em termos simples, um banco de dados é uma coleção de dados, onde os dados são armazenados em
tabelas. Alguns gostam de pensar em um banco de dados como um mecanismo organizado que tem a
capacidade de armazenar informações, pela qual um usuário pode recuperar as informações
armazenadas de uma amaneira eficaz e eficiente.

Um banco de dados relacional é um banco de dados dividido em unidades lógicas chamadas
tabelas, em que as tabelas são relacionadas entre si dentro do banco de dados. Um banco de
dados relacional permite dividir os dados em unidades lógicas menores, mais gerenciáveis,
oferecendo melhor e mais fácil manutenção e desempenho ótimo do banco de dados de
acordo com o nível de organização.

O Que é SQL?
SQL (Structured Query Language) é a linguagem padrão utilizado para comunicar-se com um banco de
dados relacional. O protótipo original foi desenvolvido pela IBM utilizando o artigo do Dr. E. F. Codd (“A
Relational Modelo of Data for Large Shared Data Banks”) Modelo Relacional de Informações de Dados
para Grandes Bancos de Dados Compartilhados.

Visão geral do Transact-SQL
Transact-SQL é a linguagem do SQL Server para definição, consulta e manipulação de dados. Essa
linguagem é baseada no padrão ANSI SQL-92, também suportado por outros bancos de dados, e
acrescenta extensões ao padrão ANSI, exclusivas do SQL Server. SQL é a sigla de estruture Query
Language, embora ela faça bem mais do que consulta.
Os comandos Transact-SQL podem ser divididos nas seguintes categorias (note que isso não abrange
todos os comandos, só os comuns que serão utilizados nesse curso):
DLL, DML, Comandos Select e DCL

ANSI SQL
Significa American National Standards Institute, uma organização que é responsável por planejar
padrões para vários produtos e conceitos. No caso do SQL, isso fornece um esqueleto básico de
fundamentos básicos necessários, que como um resultado final, permite consistência entre várias
implementações. Com a linguagem SQL podemos nos comunicar com qualquer banco de dados que
trabalhe com o sistema (RDBMS), afinal, se tivéssemos uma linguagem para cada banco de dados,
ficaria difícil a comunicação e até mesmo a migração desses dados entre bancos de dados.
Exemplo, imagine que cada país fosse um banco de dados, logo, cada país tem uma língua nativa,
dificultando então a comunicação entre eles, com isso, teríamos que aprender cada língua desses
países. Assim como o inglês que é uma língua de comunicação universal, o SQL é a língua universal de
comunicação entre banco de dados relacional, tornando mais fácil a comunicação entre os usuários e
aplicativos com o banco de dados.

Sessões de SQL
Pág.: 2 / 86

Apostila de MS SQL Server

É uma ocorrência de um usuário que interage com um banco de dados relacional por meio da
utilização de comandos de SQL. Comandos válidos de uma sessão SQL podem ser inseridos para
consultar o banco de dados, manipular dados e definir estruturas do banco de dados, como tabelas.
Quando um usuário conecta-se a um banco de dados, a sessão de SQL é inicializada.

Sistemas Gerenciadores de Banco de Dados
O acesso a informações em sistemas em sistemas de processamentos de dados que não utiliza
Sistemas Gerenciadores de Bancos de Dados (SGBDs), é feito pelo acesso seqüencial a um ou mais
arquivos. Cabe ao desenvolvedor criar mecanismo de recuperação da informação. Com a utilização de
um SGBD, porém, o acesso fica diferente: pede-se as informações ao gerenciador de banco de dados e
elas são devolvidas pelo mesmo.
O processo pode ser comparado a uma compra em uma loja de departamento e uma compra em uma
loja de autopeças, no primeiro caso o cliente dirige-se a loja e procura por todas as seções, encontra o
produto desejado e efetua a compra. Já na segunda o cliente pede o ao balconista o item desejado e
este entrega-o.No caso da compra em loja de departamentos o trabalho é toda do cliente, sendo este
responsável inclusive pelas especificações necessárias (fazer a escolha certa). Já na loja de auto peças,
o balconista assume toda a responsabilidade pela entrega da mercadoria desejada.

Arquitetura Cliente-Servidor
O SQL Server é um banco de dados relacional, destinado a ser compatível com aplicações que
apresentam arquitetura Cliente/Servidor, no qual o banco de dados fica residente em um computador
central chamado Servidor e cujas informações são compartilhados por diversos usuários que executam
as aplicações em seus computadores locais ou clientes.
A arquitetura Cliente/Servidor reduz consideravelmente o tráfego de rede, pois retorna ao usuário
apenas os dados solicitados.
Apostila de MS SQL Server

Pág.: 3 / 86

Arquitetura do SQL Server
O Banco de dados SQL Server é dividido em diversos componentes lógicos, como tabelas, índices,
visões e outros componentes visíveis para o usuário.
Um servidor SQL Server pode conter vários bancos de dados pertencentes a diversos usuários.
Cada instância de um SQL Server 2005 possui quatro bancos de dados de sistema (System Databases)
chamados master, model, tempdb e msdb. Cada um desses bancos de dados é exigido pelo SQL
Server e não pode ser renomeado e nem removido sem antes desativar o SQL Server. Os dois outros
bancos de dados que são criados o pubs e northwind, são bancos de dados de usuário e são bancos
de dados de exemplo e podem ser removidos sem afetar as operações do SQL Server.
Embora ambos os tipos de bancos de dados (Sistema e Usuário) armazenem dados, o SQL Server
utiliza os bancos de Sistema para operar e gerenciar o sistema.

R

Master
É o banco de dados principal de configuração do SQL Server. Ele contém informações em todos os
bancos de dados que existe no servidor, incluindo os arquivos de banco de dados físico e suas
localizações, também contém as definições de configuração e contas de login do SQL Server.
Informações contidas no Banco de Dados Master:
•
•
•
•
•

Registro de servidor e logins remotos,
Bancos de dados e arquivos de banco de dados locais,
Contas de logins,
Processos e trancaduras,
Definição de configurações de servidor.

Com estas informações, é valido dizer que um backup atual do banco de dados master é crucial para
qualquer recuperação do servidor.
Pág.: 4 / 86

Apostila de MS SQL Server

O processo de instalação cria o banco de dados master (master.mdf) e o arquivo de log do banco de
dados master (masterlog.ldf) no diretório do C:Arquivos de programasMicrosoft SQL
ServerMSSQLData. No caso de um banco de dados master ser corrompido ou destruído e não puder
ser restaurado do backup, você poderá reconstruir o banco de dados master no seu estado padrão, a
Microsoft fornece um utilitário chamado rebuildm.exe, que esta localizada no subdiretório C:
Arquivos de programasMicrosoft SQL Server80ToolsBinn.
Após reconstruir o banco de dados master, você terá que fazer manualmente qualquer alteração de
configuração e registro de banco de dados e servidor, além de recriar os logins para restaurar o
servidor no seu estado anterior.
Tempdb
O Banco de dados Tempdb é usado para o armazenamento de tabelas temporárias e stored
procedures temporários.
O banco de dados Tempdb é recriado toda vez que o SQLServer for iniciado, então o Tempdb não
poderia ser usado para o armazenamento de dados persistente. As tabelas e as procedures
temporárias que são geradas pelo SQL Server são soltas automaticamente quando as conexões são
fechadas. Por isso se não houver atividade de conexão, o Tempdb fica vazio, todos os bancos de dados
e processos no SQL Server compartilham o Tempdb para gravação de trabalhos. O arquivo de banco
de dados Tempdb (tempdb.mdf) e os arquivos de log (templog.ldf) estão no diretório C:Arquivos de
programasMicrosoft SQL ServerMSSQLData.
Msdb
É um banco de dados do sistema que é utilizado por vários componentes do SQL Server, como o
serviço do SQL Server Agent. Além da configuração do SQL Server Agent e das informações sobre a
tarefa, a replicação, o envio de log e os dados de plano de manutenção são armazenados no banco de
dados Msdb.
Informações contidas no banco de dados Msdb:
•
plano
•
•

Informações sobre o plano de manutenção do banco de dados, como função e histórico do
de manutenção.
Informações sobre os publicadores e os distribuidores de replicação.
Informação sobre a configuração do envio de log e monitoramento.

O arquivo de banco de dados msdb (msdb.mdf) e os arquivos de log do Msdb (msdb.ldf) estão
localizados no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData. Devido à
quantidade de informações sobre configuração armazenadas no Msdb, o backup do banco de dados é
recomendado rotineiramente. Se o banco de dados Msdb for corrompido, você poderá reconstruir um
Msdb padrão usando um script de construção do SQL Server instalado no processo de instalação. O
filename do script de instalação do Msdb é instmsdb.sql e esta localizado no diretório C:Arquivos de
programasMicrosoft SQL ServerMSSQLInstall.
Se o banco de dados Msdb não existir, o script o criará primeiro e, em seguida construirá todos os
objetos de banco de dados necessários, depois você poderá ter que reconfigurar todas as funções de
programação, planos de manutenção, envio de log e configuração de replicação.
Apostila de MS SQL Server

Pág.: 5 / 86

Model
É um banco de dados template que o SQL Server usa para criar novos bancos de dados. Cada vez que
você cria um banco de dados novo no SQL Server, o conteúdo do banco de dados Model é copiado
para dentro do novo banco de dados para estabelecer seus objetos padrões, incluindo tabelas, stored
procedures e outros objetos de banco de dados. O banco de dados é necessário mesmo que você não
pretenda
criar
nenhum
banco
de
dados
de
usuário.
Cada vez que o SQL Server é iniciado, o banco de dados Tempdb é recriado usando o Banco de dados
Model como seu template. Por padrão o banco de dados encontra-se vazio ao ser criado. O arquivo de
banco de dados Model (model.mdf) e os arquivos de log do banco de dados Model (modellog.ldf) são
criados no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData, durante o processo
de instalação.

Localização dos Bancos de dados
Os bancos de dados ficam armazenados em arquivos físicos que recebem o nome de DEVICE. Um
device ocupa sempre a quantidade de disco que for a ele destinada, independente da existência ou
não de banco de dados em seu interior e independente da taxa de ocupação destes databases.

Arquitetura de Armazenamento Físico
Os Bancos de dados SQL Server são armazenados em grupos de arquivos que contem dados
individuais e arquivos de log, cada banco de dados é feito de arquivos de dados principal e,
opcionalmente, de secundários, assim como arquivos de log. Estes arquivos são identificados por suas
extensões padrão de arquivos, arquivo de dados principal (*,mdf) e arquivo de log (*.ldf). O arquivo
de log e de dados podem ser armazenados em qualquer unidade não comprimida FAT e NTFS.
Com exceção dos arquivos de log, os dados no arquivos do SQL Server são gravados em unidades
chamadas paginas. Cada Pagina armazena 8k de dados permitindo um Maximo de 8060 bytes em cada
pagina (96bytes são usados para cada cabeçalho de pagina).
Devido ao limite de dados de pagina de 8060 bytes, o tamanho Maximo de registro também é de 8060
bytes, que inclui todos os tipos de dados, exceto ntext, text e dados de imagem. Text, ntext e dados
de imagem são gravados em uma coleção de páginas separadas que permitem até 2GB de
informações por item de dados. Um ponteiro para estas paginas de dados é gravado com o registro
fonte.
Pág.: 6 / 86

Apostila de MS SQL Server

Trabalhando com Grupos de Arquivos
Com grupos de arquivos é permitido explicitamente a colocação de objetos de banco de dados sobre
um conjunto específico de arquivos de banco de dados. Isso pode ser útil para administração assim
como para o desempenho, você pode colocar o grupo de arquivos sobre unidades físicas de disco
separadas e depois colocar os objetos do banco de dados sobre os arquivos que são membros desse
grupo de arquivos. Isso pode melhorar o desempenho por que leituras e gravações no banco de dados
executam em unidades físicas de disco separadas ao mesmo tempo. Uma vantagem administrativa é
que pode ser feito o backup e restaurar arquivos individuais em um grupo de arquivos.
Os grupos de arquivos são criados quando se altera o banco de dados e adiciona-se arquivos a um
grupo de arquivos específico.

Criando Banco de Dados ( Primeiro Projeto )
CREATE DATABASE Praticando_SQL
ON PRIMARY
(
NAME = 'Praticando_SQL',
FILENAME = 'D:LaerteBDPraticando_SQL.mdf' ,
SIZE = 10MB ,
MAXSIZE = 100MB ,
FILEGROWTH = 5MBKB
)
LOG ON
(
NAME = 'Praticando SQL_log',
FILENAME = 'D:LaerteBDPraticando SQL_log.ldf' ,
SIZE = 5MB ,
MAXSIZE = 50MB ,
FILEGROWTH = 5MB
)
Alterando Banco de Dados

Para alterar o banco de dados usamos o comando ALTER DATABASE, podemos modificar o nome do
banco de dados Praticando_SQL para Praticando_SQL_Server.

ALTER DATABASE Praticando_SQL
MODIFY NAME = Praticando_SQL_Server

Adicionando FileGroup ao Banco de Dados
ALTER DATABASE Praticando_SQL_Server
ADD FILEGROUP SECUNDARY

Adicionando mais Arquivos de Dados ao Banco de Dados
Apostila de MS SQL Server

Pág.: 7 / 86

ALTER DATABASE Praticando_SQL_Server
ADD FILE
(
NAME = Praticando_SQL_Server2,
FILENAME = 'D:AlunosLaerteBD2Praticando_SQL_Server.ndf',
SIZE = 5MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB
)
TO FILEGROUP SECUNDARY

Excluindo Arquivos de Dados ao Banco de Dados
ALTER DATABASE Praticando_SQL_Server
REMOVE FILE Praticando_SQL_Server2

Excluindo FileGroup do Banco de Dados
ALTER DATABASE Praticando_SQL_Server REMOVE FILEGROUP SECUNDARY

Excluindo o Banco de Dados
DROP DATABASE Praticando_SQL_Server
Pág.: 8 / 86

Apostila de MS SQL Server

Criando o Banco de Dados com Wizard (Segundo Projeto)
O caminho mais rápido para Se criar um novo branco do banco de dados Utilizando Microsoft SQL
Server Management Studio Express é fazer um clique direito sobre o Databases e em seguida
escolher a opção “New Database...” , como mostrado na imagem abaixo.

Surgira então a Caixa de Dialgo New Database, que veremos logo a seguir.
Apostila de MS SQL Server

Pág.: 9 / 86

O primeiro passo do assistente apresenta o quadro a baixo figura - .

figura - Caixa de Dialgo New Database
Tabela de Definições para Caixa de Dialgo New Database

Propriedade
Logical Name
File Type
File Group
Initial Size

Definição
Nome da base de dados. Referenciado em conexões.
Tipo de dados armazenado. Dados ou Log de operações.
Grupo a que pertence o arquivo, identificado por um endereço físico.
Tamanho inicial do arquivo de dados. Apartir de MB.

Autogrowth

Conforme demosntrado na caixa de dialogo “Change Autogrowth for
Banco_Curso”, define parâmetros que determinarão a forma em que os
arquivos de dados irão se expandir.

Path

Endereço (diretório) onde são armazenados os arquivos de dados.

File Name

Nome do arquivo de dados, com sufixo .MDF para arquivo de dados e .LGF para arquivo de log.
Pág.: 10 / 86

Apostila de MS SQL Server

Caixa de Dialgo Change Autogrowth

Propriedade
Enabled Autogrowth
File Growth

Definição
Habilita ou não crescimento automático, baseado em parâmetros.
Define crescimento em percentual ou Megabytes.
Restinge crescimento da área em Megabytes ou permite crescimento
Maximum File Size
indeterminado.
Tabela de Definições para Caixa de Dialgo Change Autogrowth

Vamos Preencher com os valore inseridos conforme a figura – e quando pronto clicar no botão “OK”, ai
estara criado o nosso “BD_(Nome do Aluno)_SQL”.
Apostila de MS SQL Server
Criando Group File’s com Wizard

Criando um FileGroup’s 1/2

Criando um FileGroup’s 2/2

Pág.: 11 / 86
Pág.: 12 / 86

Apostila de MS SQL Server

Adicionando Arquivos (File) de Dados ao Banco de Dados com Wizard
Apostila de MS SQL Server

Pág.: 13 / 86

Estrutura da Linguagem SQL
A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar
sobre um banco de dados. Neste curso aprenderemos apenas sobre os dois primeiros subconjuntos,
mas é importante que o estudante tenha uma noção geral dos subconjuntos básicos.

Tipos de Comandos de SQL
Linguagem de definição de dados (DDL, Data Definition Language)
É um conjunto de comandos dentro da SQL usada para a definição das estruturas de dados,
fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim
como criação de índices. Estas instruções SQL permitem definir a estrutura de uma base de
dados, incluindo as linhas, colunas, tabelas, índices, e outros metadados.
Entre os principais comandos DDL estão CREATE (Criar), DROP (deletar) e ALTER (alterar).
Linguagem de manipulação de dados (DML, Data Manipulation Language)
é o grupo de comandos dentro da linguagem SQL utilizado para manipular dados dentro de
objetos de um banco de dados relacional: recuperação, inclusão, remoção e modificação de
informações em bancos de dados.
Os principais comandos DML são SELECT (Seleção de Dados), INSERT (Inserção de Dados),
UPDATE (Atualização de Dados) e DELETE (Exclusão de Dados).
Linguagem de controle de dados (DCL, Data Control Language)
é o grupo de comandos que permitem ao administrador de banco de dados controlar o acesso
aos dados deste banco. Alguns exemplos de comandos DCL são:
• GRANT: Permite dar permissões a um ou mais usuários e determinar as regras para

tarefas determinadas;
• REVOKE: Revoga permissões dadas por um GRANT.

As tarefas básicas que podemos conceder ou barrar permissões são:
• CONNECT
• SELECT
• INSERT
• UPDATE
• DELETE
• USAGE
Pág.: 14 / 86

Apostila de MS SQL Server

Comandos de Administração de Dados
Permitem ao usuário realizar auditorias e realizar análises em operações dentro do banco de dados,
são dois comandos gerais de administração de dados:
START AUDIT
STOP AUDIT

Comandos de Controle Transacional
Permitem ao usuário gerenciar transações dentro de banco de dados.

Comando
Commit
RollBack

Definição
Salvar transações dentro do banco de dados.
Desfaz transações dentro do banco de dados.

SavePoint

Cria pontos dentro de grupos de transações até que eles desfaçam as
transações com rollback ou salvar com commit.

Set Transaction Atribui um nome em uma transação.
Apostila de MS SQL Server

Pág.: 15 / 86

Procedimentos Armazenados do Sistema
Um procedimento armazenado [stored procedure] é uma seqüência de comandos da linguagem
Transact-SQL, compilados e armazenados num banco de dados. Os procedimentos armazenados do
sistema [system stored procedures] são fornecidos pelo SQL Server, armazenados no banco de dados
Máster e automatizam várias tarefas comuns de gerenciamento.
Por Exemplo, o procedimento sp_databases mostra quais os nomes de bancos de dados existentes.
Exemplos de estored procedures armazenados:
•
•

sp_databases – mostra quais os nomes de bancos de dados existente.
sp_helpdb aula – mostra informações sobre o banco de dados aula.

Note que todos os procedimentos armazenados do sistema têm nomes que começam com ‘sp_’
(abreviatura de System Procedures). Ao executar um procedimento que inicie com ‘sp_’ o
procedimento sera procurado no banco de dados atual, se não for encontrado ele será procurado no
banco de dados Máster.
Quando um procedimento inicia com ‘xp_’ ele é um procedimento estendido, quer dizer que não foi
escrito em SQL, mas foi compilado como parte de uma DLL.
Exemplo: xp_cmdshell ‘calc.exe’
Pág.: 16 / 86

Apostila de MS SQL Server

Tabelas
Entidades, Relacionamentos e Atributos
Quanto mais organizadas estiverem as informações no Banco de dados, mais forte será a “Conversa”
com o Gerenciador de Banco de Dados. Para Isso criou-se um modelo chamado de Modelo de
Entidade e Relacionamentos, do qual fazem parte três elementos:
Entidades: Uma entidade é um objeto de interesse do qual podem ser colecionadas informações. Ex:
Tabelas de clientes, Tabela de pedidos de clientes.
Relacionamentos: As entidades podem ser relacionadas entre si pelos relacionamentos.
Ex: Entidade de Clientes e Entidade de Pedidos (“clientes fazem pedidos”).
Atributos: São as características das entidades. São representadas pelas colunas das tabelas. Ex:
nome, endereço, telefone e etc.
Componentes de uma Tabela
O armazenamento e a manutenção de dados valiosos é a razão para a existência de qualquer banco
de dados. Lembre-se de que uma tabela é a forma mais simples de armazenamento de dados em um
banco de dados relacional.
A seguir os componentes de uma tabela:
Campo: É uma coluna em uma tabela que é projetada para manter informações específicas sobre
cada registro na tabela. Ex:
ID_CLIENTE

NOME

ENDEREÇO

TELEFONE

Registro ou Linha de dados: É cada entrada individual que existe em uma tabela. Ex:
ID_CLIENTE
20003
20004

NOME
João da Silva
Marcos Pereira

ENDEREÇO
R. Conde Pameira
R. Paula Frontes

TELEFONE
3333-3235
2522-8589

Coluna: É uma entidade vertical em uma tabela que contém todas as informações associadas com
um campo específico em uma tabela. Ex:
ID_CLIENTE
20003
20004
20005
Apostila de MS SQL Server

Pág.: 17 / 86

Criando Tabelas

Uma tabela [table] é um objeto do banco de dados, composto de zero ou mais linhas [rows], contendo
os dados, organizados em uma ou mais colunas [columns]. Para criar a tabela você pode usar o
Enterprise Manager ou utilizando comandos SQL DDL (Data Definition Language ) no SQL Query
Analyzer. Antes de criar suas tabelas, é importante levar em conta um bom projeto do banco de dados,
que determina quais as informações a serem guardadas.

Tipos de Dados

Cada coluna tem um tipo de dados [data type], que determina que tipo de informações (caracteres,
números, datas/horas) podem ser colocadas nas colunas e quais as características desses dados. O
tipo de dados é determinado quando a tabela é criada e não pode ser alterado posteriormente. Você
pode usar tipo de dados do sistema, predefinidos, ou criar novos tipos de dados, chamados tipo de
dados do usuário baseados nos tipos de dados existentes.
Os tipos de dados existentes são:
Tipo

Definição

Tamanho

Char(n),

Caracteres Alpha Numéricos – Posição Fixa

Até 4.000

Varchar(n)

Caracteres Alpha Numéricos – Posição Não Fixa

Até 4.000

Decimal(p,e)

Caracteres Numéricos com definiçao de precisão e escala

Até (38,38)

numeric(p,e)

Caracteres Numéricos com definiçao de precisão e escala

Até (38,38)

BigInt

Caracteres Numéricos Inteiros de 8 bytes

–2^63 a 2^63-1

Int

Caracteres Numéricos Inteiros de 4 bytes

–2^17 a 2^17-1

SmallInt

Caracteres Numéricos Inteiros de 2 bytes

–2^14 a 2^14 -1

TinyInt

Caracteres Numéricos Inteiros de 1 byte

–2^7 a 2^7 -1

Real

Caracteres Numéricos de Ponto Flutuante de 8 bytes

15 digitos

Money

Caracteres Numéricos de 4 Casas Decimais de 8 bytes

–2^63 a 2^63-1

Smallmoney

Caracteres Numéricos de 4 Casas Decimais de 4 bytes

–2^17 a 2^17-1

Datetime

Caracteres de Data e Hora de 4 bytes

Smalldatetime

Caracteres de Data e Hora de 2 bytes

Binary(n)

Tipos de Dados Binários de tamanho Fixo de bytes de n. n
deve ser um valor de 1 a 8000

January 1, 1753-December
31, 9999
January 1, 1900, through
June 6, 2079
Bytes n+4

varbinary(n)

Tipos de Dados Binários de tamanho variável de bytes de n. n Comprimento real dos dados
deve ser um valor de 1 a 8000
+ 4 bytes, não bytes de n

Imagem

Tipos de Dados Binários de tamanho variável

2^31-1

Text,

Caracteres Alpha Numéricos de tamanho variável

2^30-1

Bit

Caracteres Numéricos de 1 bit

0-1
Pág.: 18 / 86

Apostila de MS SQL Server

Criando Tabelas do Projeto de Aula
Tabela de Clientes
CREATE TABLE Clientes
(
ID_Cliente Bigint
Nome
varchar (50)
Cnpj
char (25)
Tipo
char (1)
Status
Bigint
Data
datetime
Credito
money
)

NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
NULL

Criando a Tabela de Produtos

CREATE TABLE Produtos
(
ID_Produto Bigint
Descricao
varchar (25)
PrecoCompra money
Saldo
Bigint
)

NOT NULL ,
NOT NULL ,
NOT NULL ,
NOT NULL

Criando a Tabela de Pedidos no Filegropes Secundary

CREATE TABLE Pedidos
(
ID_Pedido
Bigint
ID_Cliente Bigint
DataPed
datetime
)
On SECUNDARY

NOT NULL ,
NOT NULL ,
NOT NULL
Apostila de MS SQL Server

Pág.: 19 / 86

Criando a Tabela de Itens no Filegropes Secundary utilizando Wizard
Acione com o botão direito do mouse na caixa de dialogo Object Explore, clicando em New Table. Logo
em seguida pode ser definido aspectos como nome da tabela, local de armazenamento e a qual esquema
pertence. Para tanto, observe a caixa de dialogo Properties.

CREATE TABLE Itens
(
ID_Pedido
Bigint
ID_Produto Bigint
Quantidade Bigint
PrecoVenda money
)
On SECUNDARY

NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL

Área de Trabalho – Create Table
Nota 01:
Observe a tabela de tipos pagina 17, anteriormente exibida nessa apostila visando conhecer
os vários tipos possíveis para cada coluna da tabela.
Nota 02:
Ao final, ainda não sendo definido o nome da tabela, será solicitado conforme caixa de dialogo
Pág.: 20 / 86

Apostila de MS SQL Server

Choose Name.
Nota 03:
Nessa etapa podemo definir a Chave-Primária da tabela, bastando somente definir (selecionar
usando a tecla shift) as colunas que irão compor essa chave, e com o botão direito do mouse
optar por Set Primary Key.

Caixa de Dialogo Choose Name
Apostila de MS SQL Server

Pág.: 21 / 86

Constraints
Chave Primária [Primary Key]
A chave primaria [primary key] de uma tabela é uma coluna ou seqüência de colunas que identificam
unicamente uma linha dentro da tabela, ou seja, seu valor não pode ser repetido para outras linhas. Ao
definir uma chave primária, automaticamente é criado um índice na tabela. Só pode haver uma chave
primária na tabela.
Na criação da tabela, essa restrição pode ser definida da seguinte forma (quando a chave primária é
composta de uma só coluna):

Definindo Primary Key (Chave Primária) na criação da tabela
CREATE TABLE Clientes2
(
ID_CLIENTE
NOME
CNPJ
TIPO
STATUS
DATA_CADASTRO
HISTORICO
CREDITO
)

bigint
not null
identity (1,1) primary key,
varchar (50) not null,
char (18)
not null,
char (1)
not null,
bit
not null,
datetime
not null,
Text,
money,

Obs.: Uma chave primária pode ser acrescentada à tabela depois que ela foi criada com o comando
ALTER TABLE. Por exemplo, vamos criar chaves primárias à tabela clientes de duas maneiras distintas:

1ª Maneira:

ALTER TABLE Clientes add primary key (id_cliente)
2ª Maneira:

ALTER TABLE Clientes add constraint PK_Clientes primary key (id_cliente)

Utilizando o Wizard para definir “Primary Key”.
No Enterprise Manager, podemos facilmente definir a Primary Key, clicando com o botão direito sobre a
Pág.: 22 / 86

Apostila de MS SQL Server

tabela e na caixa de dialogo escolher a opção “Desing”, em ai selecionando as linhas (que
representam coluna), clicando em seguida com o botão direito do mouse e escolhendo no menu de
contexto a opção “Set Primary Key”.

Pronto esta setado a coluna “ID_Cliente” como Primary Key!
Apostila de MS SQL Server

Pág.: 23 / 86

Criando Chave Primária para as Tabelas do Projeto
ALTER TABLE
ALTER TABLE
ALTER TABLE

Produtos
Pedidos
Itens_Pedidos

add constraint
add constraint
add constraint

PK_Produtos
PK_Pedidos
PK_Itens

primary key
primary key
primary key

(id_produto)
(id_pedido)
(Id_Pedido , Id_Produto)

Unicidade [Unique]
Uma restrição unique em uma coluna ou grupo colunas determina que seu valor deva ser único na
tabela. Esse tipo de restrição é usado para chaves alternadas, ou seja, valores que se repetem na tabela
além da chave primária. Pode haver várias restrições UNIQUE na tabela e as colunas de uma restrição
UNIQUE permitem valores nulos. Repare na sintaxe:
ALTER TABLE Clientes ADD UNIQUE (CNPJ)

Chave Estrangeira [Foreign Key]
Uma forma importante de integridade no banco de dados é a integridade referencial, que é a verificação
de integridade feita entre duas tabelas. Por exemplo, a tabela ‘dbo.itens’ será usada para relacionar
dados de produtos e pedidos. Ela contém as colunas ID_PRODUTO e ID_PEDIDO.
Uma chave estrangeira é uma restrição de integridade referencial. Ela consiste de uma coluna ou grupo
de colunas cujo valor deve coincidir com valores de outra tabela. No nosso caso, vamos adicionar duas
chaves estrangeiras na tabela ‘dbo.itens’: ID_PEDIDO faz referencia a coluna ID_PEDIDO da tabela
dbo.pedidos e ID_PRODUTO que faz referência à coluna ID_PRODUTO da tabela dbo.produtos e uma
chave estrangeira na tabela ‘dbo.pedidos’: ID_CLIENTE que faz referencia a coluna ID_CLIENTE da
tabela ‘dbo.clientes’, como seguem abaixo:

ALTER TABLE
FOREIGN KEY

pedidos
(id_cliente)

ADD CONSTRAINT
References

fk_pedidos_clientes
clientes (id_cliente)

ALTER TABLE
FOREIGN KEY

Itens
(id_pedido)

ADD CONSTRAINT
References

fk_itens_pedidos
pedidos (id_pedido)

ALTER TABLE
FOREIGN KEY

Itens
(id_produto)

ADD CONSTRAINT
References

fk_itens_produtos
produtos (id_produto)

Para excluir uma restrição, é preciso saber o seu nome. Se você não informou o nome na criação, terá
que descobri-lo, o que pode ser feito usando-se:

sp_help

'dbo.clientes2'

Esse comando mostra informações sobre a tabela, inclusive os nomes de cada restrição. Para excluir,
usa-se ALTER TABLE, com a opção DROP (independente do tipo de restrição).
Pág.: 24 / 86

Apostila de MS SQL Server

ALTER TABLE clientes DROP CONSTRAINT nome_da_restrição

Uma restrição também pode ser desabilitada temporariamente e depois reabilitada com o comando
ALTER TABLE, usando as opções NOCHECK (para desabilitar) e CHECK (para habilitar). Isso não funciona
com primary key, unique ou default, apenas com as outras restrições.

ALTER TABLE itens NOCHECK CONSTRAINT nome_da_restrição
Diagrama entidade relacionamento
Diagrama entidade relacionamento é um modelo diagramático que descreve o modelo de dados de um
sistema com alto nível de abstração. Ele é a principal representação do Modelo de Entidades e
Relacionamentos. É usado para representar o modelo conceitual do negócio. Não confundir com modelo
relacional, que representam as tabelas, atributos e relações materializadas no banco de dados.
MER: Conjunto de conceitos e elementos de modelagem que o projetista de banco de dados precisa
conhecer. O Modelo é de Alto Nível.
DER: Resultado do processo de modelagem executado pelo projetista de dados que conhece o MER.
[editar]Tipos de relações
Os tipos de relações que são utilizadas neste diagrama:
Relação 1..1 (lê-se relação um para um) - indica que as tabelas têm relação unívoca entre si. Você
escolhe qual tabela vai receber a chave estrangeira;
Relação 1..n (lê-se um para muitos) - a chave primária da tabela que tem o lado 1 vai para a tabela do
lado N. No lado N ela é chamada de chave estrangeira;
Relação n..n (lê-se muitos para muitos) - quando tabelas têm entre si relação n..n, é necessário criar
uma nova tabela com as chaves primárias das tabelas envolvidas, ficando assim uma chave composta,
ou seja, formada por diversos campos-chave de outras tabelas. A relação então se reduz para uma
relação 1..n, sendo que o lado n ficará com a nova tabela criada.
Apostila de MS SQL Server

Pág.: 25 / 86

Diagrama

Diagrama de Entidade e Relacionamento (DER).
Através deste diagrama poderemos representar, de forma sucinta e bem estruturada, todos os
elementos essenciais abstraídos no processo de análise de sistemas. Denominamos entidade
(retângulo) estes elementos. Atribuímos a cada entidade definida atributos pertinentes ao
sistema. Desta forma, podemos definir conceitualmente que representaremos como entidades
aqueles elementos no qual gostaríamos de armazenar dados – que por sua vez, são representados
pelos atributos. Através do relacionamento (losango) representaremos o tipo de relação existente entre
as entidades.
Pág.: 26 / 86

Apostila de MS SQL Server

Criando Chave Estrangeira com Wizard
Basta selecionar a coluna desejável, clicando com o botão direito do mouse na opção RelationsShips,
clicando em seguida no botão Add. Imediatamente a caixa de dialogo Foreign Key RelationsShips passa
apresentar as propriedades conforme ilustrado.

Caixa de Dialogo Foreign Key RelationsShips
Propriedade

Definição

Quando assinaldo Yes, verifica a existência de dados que possam
Check Existing Data impedir a criação da chave, devido a existência de valores na coluna
on Create
não válidos. Não válidos aqui refere-se a valores não encontrados
previamente na coluna de referência na tabela de referência.
Exibe uma Caixa de Dialogo onde é solicitado:
Tables and Columns Escolha das colunas que irão compor a chave estrangeira.
Escolha da tabela de referência (Foreign Table) e a coluna nessa tabela
Especification
onde será verificado a existência prévia de valor correspondente
quando da inclusão ou auteração de registros.
Name

Nome
da
chave
estrangeira,
normalmente
no
padrão
FK_NomeTabelaOrigem_NomeTabelaDestino
Tabela de Definições para Caixa de Dialogo Foreign Key RelationsShips
Apostila de MS SQL Server

Pág.: 27 / 86

Índices
Porque Índices?
Índice é um mecanismo que acelera bastante o acesso aos dados. Consiste de uma estrutura de dados
que contém ponteiros ordenados para os dados. O SQL Server usa [Indexes ou Índices]
automaticamente em varias situações para acelerar a pesquisa e atualização de dados. Por exemplo:
•
Se uma coluna esta na cláusula WHERE em um comando SELECT, UPDATE ou DELETE, o SQL
Server verifica as condições mais rapidamente se houver um índice, caso contrário ele faz uma
varredura seqüencial da tabela [table scan].
•
Se uma coluna é muito usada para ordenar valores (com ORDER BY), essa ordenação é mais
eficiente se ela tiver um índice.
•
Se uma coluna é usada para fazer junção de duas tabelas, essas junções podem ser feitas mais
eficientes se ela estiver indexada.
No entanto, índices levam tempo para serem criados e ocupam espaço em disco. Cada atualização na
tabela também atualiza dinamicamente todos os índices definidos. Portanto se você criar muitos
índices inúteis numa tabela, pode estar atrapalhando o desempenho da atualização de dados sem
agilizar muito o tempo de resposta nas consultas.
Para criar um Índice usamos o comando CREATE INDEX.

Alguns Exemplos do comando “CREATE INDEX”:

CREATE INDEX

Idx_Clientes_Nome ON Clientes(Nome)

CREATE INDEX

Idx_ProdutoS_Descricao

ON Produtos(Descricao)

On SECUNDARY

CREATE INDEX

Idx_Pedidos_DataPed

ON Pedidos(DataPed)

On SECUNDARY
Pág.: 28 / 86

Apostila de MS SQL Server

Criando Índices com Wizard
Antes de mas nada vamos excluir o index na Tabela Produtos. Ai sim Clicando sobre o nó Table, em
seguida procedendo da mesma maneira com o nó que representa a tabela onde criaremos o índice,
selecione e clique em seguida com o botão direito do mouse sobre o nó Index. A caixa de dialogo New
Index combinada com a caixa de dialogo Select collumns proverá todo o processo. Ainda, observe nas
tabelas de referência dessas ciaxas de dialogos as definições para cada propriedade envolvida.

Caixa de dialogo New Index – Aba General
Apostila de MS SQL Server
Propriedade
Index Name

Index Type

Index
Columns

Definição
Naturalmente o nome do objeto
Idx_NomeTabela_NomeCampos

Index,

no

Pág.: 29 / 86

padrão

desejável

NonClusterd ou Clustered. Nesse caso não, uma vez que somente um
índice clusterizado pode existir em uma tabela.
Um índice clusterizado ordena fisicamnente uma tabela pela coluna ou
colunas indicadas, aasim, como naturalmente a criação da chave primária
(indicando a locuna ID_PRODUTO) gerou um índice clusterizado, não há
mais possibilidade.
Um índice clusterizado é desejável por não necessitar de uma tabela extra
para o índice, economizando espaço em mídia e pelo fato de ser mais
rápido já que os daados serão ordenados ficamente na tabela.
Key A partir do botão Add, podemos escolher as colunas que irão compor o
Índice.

Caixa de dialogo Selct Colummns
Pág.: 30 / 86

Apostila de MS SQL Server

Aspectos Importantes na Criação de Índices
Base de dados para serém eficientes, necessitam de índices e sobretudo, de bons índices. Algumas
características observadas na caixa de dialgo New Index, especificamente na Aba Options concorrem
para isso. Veja na tabela sobre definições algumas dessas características.

Caixa de Dialogo New Index – Aba Options
Propriedade
Automatically
statistics

Definição
recompute Mantém estatísiticas úteis na execução de futuros Seclects.
Desejável, mas com o inconviniente de gerar dados extas na base.

Não provocar lock de registros quando
obtenção de daods. A prática de uso de
Use row locks when
negócios atuais (uso de banco de
accessing the index
concorrência de dados, sobretudo nos
web.

sendo utilizado index para
lock é raro nos modelos de
dados) pois impacta a
modelos que atemdem a

Armazena resultados na base temporária para recuperação mais
Stored intermediate sort
rápida imediatamente após sua execução. Isso pode ajuda na
result in tempdb
performance de uma seleção subsequente.

Set fill factor

Define o percentual de uso das páginas de índices. O aconselhável
é 80%, determinando uma sobra de 20% em cada página de índice.
Essa sobra de espaço, prove solução para quando da entrada de um
novo registro, que provocaria a divisão da página de índice em
duas, acomodando esse valor, que devido ao critério de indexação
deveria estar nessa página. Isso retarda mas não evita em definitivo
a fragmentação pela divisão de páginas de índices cheias.
Apostila de MS SQL Server

Pág.: 31 / 86

Linguagem SQL
Inserindo Dados ( DML )
Em um banco de dados, inserir dados em uma tabela, significa preencher uma linha de determinada
tabela com dados correspondentes aos tipos determinados naquela tabela. Esta inserção de dados deve
seguir as regras de integridade da tabela, assim como respeitar as regras de chave primária
estabelecidas na tabela.
O comando “INSERT” insere linhas em uma tabela. A forma mais simples do comando insert somente
uma linha de dados. Nesse caso, são informados os valores de todas as colunas da tabela, na ordem em
que elas foram definidas na tabela. Mas é possível inserir dados parciais de apenas algumas colunas,
desde que a mesma não estejam definidas como “NOT NULL” .
Na linguagem SQL, para inserirmos dados em uma tabela, utilizamos o seguinte comando:

INSERT INTO Nome_Tabela VALUES
(valor 1, valor2, valor3,...)
Obs.: Os valores valor1 , valor2, etc..., seguem a ordem dos campos da tabela, sendo utilizado valor
vazio (' ') para campos que não necessitem de preenchimento. Dados de tipo numérico podem ser
escritos sem a necessidade de aspas simples. Dados do tipo carácter (como char e varchar), devem ser
escritos entre aspas simples.
Exemplo:

INSERT INTO Clientes VALUES
( 1 , 'MADEIRAS SAMAN' , '0002002/0001' , 'J' , 1 , 2003/6/25 , 1505.00 )

Tabela de Clientes
ID_Cliente

Nome

CNPJ

Tipo

Status

Data

Crédito

1

MADEIRAS SAMAN

0002002/0001

J

1

25/06/2003

1.505

2

CAR VEICULOS

10025600/0001

J

1

12/04/2005

1.112

3

CARLOS PEDREIRA

052116852-85

F

1

12/04/2004

500.00

9

FERNADA FERRAZ

011452369-85

F

1

11/02/2002

250.00

10

DANIEL SILVA

014548987-20

F

1

16/03/2001

150.00

11

FRAN ADESIVOS

2005006/0001

J

0

05/04/2005

50.00

12

SAPATOS E CIA.

10060085/0001

J

1

05/05/2003

900.50

13

CALÇADOS VARTA

2002550/0001

J

0

12/07/2001

874.60

21

SALE ADVOGADOS

00010003/0001

J

1

04/06/2004

20.00

22

PAULA MEDEIROS

003254896-84

F

0

01/06/2002

10.00
Pág.: 32 / 86

Apostila de MS SQL Server

Tabela de Pedidos

INSERT INTO Pedidos
VALUES (1 , 1 , 10-05-2010)

ID_PEDIDO

ID_CLIENTE

DATAPED

1

1

10/05/2007

2

2

10/05/2007

3

1

25/05/2007

4

3

01/06/2007

5

9

04/06/2007

6

9

27/06/2007

7

10

10/07/2007

8

2

13/07/2007

9

10

15/07/2007

Tabela de Produtos

INSERT INTO Nome_Tabela VALUES
( valor 1 , valor2 , valor3 , valor4 )

ID_PRODUTO
1
2
3
5
7
10
11
12
21
22

DESCRIÇÃO
CANETA
LAPIS
BORRACHA
PAPEL LISO
PAPEL A4
COLA
GRAMPO
COPO PLASTICO
CADERNO
FICHAS

PRECO_CPOMPRA
0.19
0.10
0.05
5.60
5.80
1.19
1.52
1.06
2.26
2.42

SALDO
20
112
42
23
22
3
52
14
16
120
Apostila de MS SQL Server
Tabela de Itens
INSERT INTO Nome_Tabela VALUES
( valor 1 , valor2 , valor3 , valor4 )

ID_PEDIDO
01
01
02
03
03
03
04
04
04
05

ID_PRODUTO
1
2
2
3
7
1
2
7
1
3

QUANTIDADE
2
16
10
11
8
45
14
9
10
18

PRECO_VENDA
2,50
1,75
1,75
4,00
0,25
2,50
1,75
0,25
2,50
4,00

Pág.: 33 / 86
Pág.: 34 / 86

Apostila de MS SQL Server

Atualizando Dados
Os dados em uma tabela pode ser modificada utilizando o comando UPDATE. O comando update não
adiciona novos registros a uma tabela, e nem remove os registros, simplesmente atualiza os dados
existentes. A forma mais simples da instrução update é a sua utilização para atualizar uma única coluna
em uma tabela. Tanto uma única linha de dados como numerosos registros podem ser atualizados ao
atualizar uma única coluna em uma tabela.
Synopsis
UPDATE

[ ONLY ] tabela SET coluna = expressão [, ...]
[ FROM lista_de ]

[ WHERE condição ]

UPDATE
WHERE

clientes
Set tipo = ‘F’
id_cliente = 1

Excluindo Dados
O comando delete é utilizado para remover linhas inteiras de dados de uma tabela. O comando delete
não é utilizado para remover valores de colunas especificas, um registro completo, incluindo todas as
colunas é removido. A instrução delete deve ser usada com cautela, ela funciona muito bem. Para
excluir um único registro ou registro selecionados de uma tabela, a instrução delete deve ser utilizada
com a seguinte sintaxe:
Synopsis
DELETE FROM

[ ONLY ] tabela
[ WHERE condição ]

DELETE FROM clientes
Where ID_CLIENTE = 22
Apostila de MS SQL Server

Pág.: 35 / 86

A Sintaxe SELECT
O comando SELECT recupera dados de uma ou mais tabelas, é a instrução utilizada para construir
consultas no banco de dados. A cláusula FROM é a cláusula obrigatória e sempre deve ser utilizada em
conjunção com a instrução SELECT.
Há quatro cláusulas, que são partes valiosas de uma instrução SELECT, A sintaxe mais simples para
recuperar dados dentro de um banco de dados:
• Consulta a dados de uma tabela

SELECT
FROM
WHERE

listas_de_colunas
listas_de_tabelas
condições

A lista_de_colunas especifica quais colunas serão retornadas como resultado, separadas por vírgula ou
um asterisco (*) que indica todas as colunas da tabela.
A cláusula FROM, com uma lista_de_tabelas, especifica quais tabelas serão consultadas.
A cláusula WHERE especifica condições que devem ser satisfeitas pelas linhas das tabelas.
O comando SELECT pode ser utilizado para mostrar o conteúdo de variáveis, valores literais, etc...
Exemplo, execute o comando:

SELECT @@version

Comandos Select
SELECT, o camando que representa a Data Query Language (DQL) em que SQL, é a instrução utilizada
para construir consultas no banco de dados. A cláusula FROM é a cláusula obrigatória e sempre deve ser
utilizada em conjunção com a instrução SELECT.
Há quatro cláusulas, que são partes valiosas de uma instrução SELECT:

SELECT
FROM
WHERE
ORDER BY
Pág.: 36 / 86

Apostila de MS SQL Server

Exemplo 01:

SELECT * FROM clientes

Exemplo 02:

SELECT id_cliente, nome, cnpj, status, tipo
FROM clientes

Agora adicione uma condição à mesma consulta.

SELECT id_cliente, nome, cnpj, status, tipo, data
FROM clientes
WHERE id_cliente in (2, 3, 9)

Operadores Aritméticos Permitidos
Os operadores aritméticos desempenham operações matemáticas em duas expressões de um ou mais
dos tipos de dados da categoria de tipo de dados numéricos.
Operador

Significado

(Adicionar)

Adição

- (Subtrair)

Subtração

* (Multiplicar)

Multiplicação

/ (Dividir)

Divisão

% (Modulo)

Retorna o resto de inteiro de uma divisão. Por exemplo, 12% 5 = 2 porque o resto
de 12 dividido por 5 é 2.
Apostila de MS SQL Server

Pág.: 37 / 86

Funções de agregação
Realizam cálculos em um conjunto de valores e retornam um único valor. Com exceção da
função COUNT, as funções de agregação ignoram valores nulos.
COUNT
A função COUNT é utilizada para contar linhas ou valores de uma coluna que não tem valor null. A
função COUNT quando utilizada com uma consulta retorna valor numérico.

SELECT COUNT (*) FROM CLIENTES

SUM
É utilizada para retornar um total nos valores de uma coluna para um grupo de linhas.

SELECT SUM (CREDITO) FROM CLIENTES

MAX
A função MAX é utilizada para retornar o valor máximo para valores de uma coluna em um grupo de
linhas.

SELECT MAX (CREDITO) FROM CLIENTES

MIN
A função MIN retorna o valor mínimo de uma coluna para um grupo de linhas.

SELECT MIN (CREDITO) FROM CLIENTES

AVG
A função AVG retorna o valor médio não ponderado de uma coluna para um grupo de linhas.

SELECT AVG (CREDITO) FROM CLIENTES
Pág.: 38 / 86

Apostila de MS SQL Server

Duas Formas Possíveis de Select

Com ALIAS (Significa segundo nome, ou apelido.)

SELECT

Cl.nome,
Cl.credito,
Pe.DataPed,
Sum(It.Quantidade * It.Preco_Venda) As Total

FROM

Clientes Cl, Pedidos Pe, Itens It

WHERE

Cl.id_cliente = Pe.id_cliente AND Pe.id_pedido = It.id_pedido

GROUP BY

Cl.nome, Cl.credito, Pe.DataPed

Ou Sem ALIAS

SELECT

Clientes.nome,
Clientes.credito,
Pedidos.DataPed,
Sum(Itens.Quantidade * Itens.Preco_Venda) As Total

FROM

Clientes, Pedidos, Itens

WHERE
Itens.id_pedido

Clientes.id_cliente = Pedidos.id_cliente

GROUP BY Clientes.nome, Clientes.credito, Pedidos.DataPed

AND

Pedidos.id_pedido

=
Apostila de MS SQL Server

Pág.: 39 / 86

Operadores Lógicos
São aqueles operadores que utilizam palavras-chave de SQL para fazer comparações em vez de
símbolos. Os operadores lógicos abordados são:
IS NULL
Utilizado para comparar um valor com um valor null. No exemplo, o campo crédito não tem valor.

SELECT

*

FROM CLIENTES

WHERE CREDITO IS NULL

BETWEEN
É utilizado para procurar valores que estão dentro de um conjunto de valores, dado o valor mínimo e o
valor máximo. No exemplo, o campo valor deve estar entre 20 e 50.

SELECT

*

FROM CLIENTES

WHERE credito BETWEEN 20 AND 50

IN
É utilizado para comparar um valor com uma lista de valores literais que foi especificada. No exemplo, o
campo crédito deveria ser um dos valores da lista.

SELECT

*

FROM CLIENTES WHERE CREDITO IN (20, 30, 50)

LIKE
É utilizado para comparar um valor com valores semelhantes utilizando operadores curinga (%)
porcentagem ou (_) sublinhado.
-Exemplolo: Localiza quaisquer valores que comecem com PAB

SELECT

*

FROM CLIENTES WHERE nome LIKE 'PAB%'

-Exemplo: Localiza quaisquer valores que contenham ABL a partir da segunda casa e terminem com
quaisquer valores.

SELECT

*

FROM CLIENTES WHERE nome LIKE 'ABL%'

EXISTS
É utilizado para procurar a presença de uma linha em uma tabela específica que atenda a certos
Pág.: 40 / 86

Apostila de MS SQL Server

critérios. Veja como pesquisar para ver se id_cliente 982 está na tabela clientes.

SELECT * FROM CLIENTES
WHERE EXISTS ( Select id_cliente From clientes Where id_cliente = 982)

NOT EXISTS
É utilizado para procurar a não ocorrência de uma linha em uma tabela específica que atenda a certos
critérios. Veja como pesquisar para ver se existe clientes que não compraram. Logo não ocorrem na
tabela pedidos.

SELECT * FROM CLIENTES WHERE NOT EXISTS
(
Select id_cliente From Pedidos
WHERE Pedidos.id_cliente = Clientes.id_Cliente
)
Apostila de MS SQL Server

Pág.: 41 / 86

C o n c eito s b á si c o s de jun ç õe s
Usando junções, é possível recuperar dados de duas ou mais tabelas com base em relações lógicas entre as
tabelas. Junções indicam como Microsoft S QL Server deveriam usar dados de uma tabela para selecionar as
linhas em outra tabela.
Uma condição de junção define o modo como duas tabelas são relacionadas em uma consulta por:

•

E specificando a coluna de cada tabela a ser usada para a junção. Uma condição de junção típica
especifica uma chave estrangeira de uma tabela e sua chave associada na outra tabela.

•

E specificando um operador lógico (por exemplo, = ou <>) a ser usado na comparação de valores das
colunas.

Para esse exemplo vamos adicionar uma nova tabela em nosso banco:
CREATE TABLE Cidades
(
ID_Cidade
int
CidadeNome
Estado
)

NOT NULL
PRIMARY KEY,
varchar (50)
NOT NULL,
char (2)
NOT NULL

ALTER TABLE CLIENTES Add Id_Cidade char (2) NOT NULL

INNER JOINS
Um INNER JOIN conecta duas ou mais tabelas segundo uma condição de junção. O INNER JOIN retorna
os registros que forem encontrados nas tabelas e respeitarem as condições de busca.

SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado
FROM Clientes INNER JOIN Cidades ON

Clientes.ID_Cidade = Cidades.ID_Cidade

OUTER JOINS
Como podemos reparar no INNER JOIN, somente as linhas que possuem dados nas duas colunas do
relacionamento são retornadas. Caso uma das colunas não possua valor (tenha null), este registro não
participará da junção do SELECT.
Isto pode não uma determinada pergunta. Você pode estar querendo saber, por exemplo, quais os
clientes que você tem cadastrado, e, se houver a informação, o nome da cidade destes.

LEFT OUTER JOINS
Neste caso, você precisa de um OUTER JOIN. Um OUTER JOIN traz todas as linhas de uma determinada
tabela, tendo ou não relacionamento completo, e as linhas da segunda tabela que satisfizerem o
relacionamento. Vamos construir o exemplo dito antes:

SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado
FROM Clientes LEFT OUTER JOIN Cidades
ON Clientes.ID_Cidade = Cidades.ID_Cidade;
Pág.: 42 / 86

Nome
Cliente1
Cliente2
Cliente3
Cliente4

Apostila de MS SQL Server
CidadeNome
Estado
Rio de Janeiro
São Paulo
NULL
São Paulo

RJ
SP
NULL
MG

RIGHT OUTER JOINS
Se quiséssemos trazer todas as cidades, e os clientes que existirem nelas, faríamos:

SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado
FROM Clientes RIGHT OUTER JOIN Cidades
ON Clientes.ID_Cidade = Cidades.ID_Cidade

Nome
Cliente1
Cliente2
Cliente4
NULL

CidadeNome
Rio de Janeiro
São Paulo
São Paulo
Vitória

Estado
RJ
SP
MG
ES

Que esteja bem claro que a palavra LEFT ou RIGHT refere-se apenas à ordem escrita das tabelas,
vamos ver um outro exemplo de trazer todos os clientes e as cidades destes:

SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado
FROM Cidades RIGHT OUTER JOIN Clientes
ON Clientes.ID_Cidade = Cidades.ID_Cidade

Nome
Cliente1
Cliente2
Cliente3
Cliente4

CidadeNome
Rio de Janeiro
São Paulo
NULL
São Paulo

Estado
RJ
SP
NULL
MG

FULL OUTER JOINS
E podemos, ainda, juntar os dois modos: ou seja, fazer um LEFT e RIGHT OUTER JOIN ao mesmo
tempo. Isto, na, verdade, se chama FULL OUTER JOIN. E o exemplo está a seguir:

SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado
FROM Cidades FULL OUTER JOIN Clientes
ON Clientes.ID_Cidade = Cidades.ID_Cidade;
Nome
Cliente1
Cliente2
Cliente4
NULL
Cliente3

CidadeNome
Rio de Janeiro
São Paulo
São Paulo
Vitória
NULL

Estado
RJ
SP
MG
ES
NULL
Apostila de MS SQL Server

Pág.: 43 / 86

Views
Uma visão (View) é uma forma alternativa de olhar os dados contidos em uma ou mais tabelas. Para
definir uma visão, usa-se um comando SELECT que faz uma consulta sobre as tabelas. A visão aparece
depois como se fosse uma tabela.
Visões têm as seguintes vantagens:
•

Uma visão pode restringir quais as colunas da tabela podem ser acessadas (para leitura ou
modificação), o que é útil no caso de controle de acesso,

•

Uma consulta SELECT que é usado muito frequentemente pode ser criada como visão. Com isso,
a cada vez que ela é necessária, basta selecionar dados da visão,

•

Visões podem conter valores calculados ou valores de resumo, o que simplifica a operação,

•

Uma visão pode usada para exportar dados para outras aplicações.

Criando uma visão
Vamos criar uma visão no banco de dados Aluno, usando a tabela Clientes. Essa visão vai mostrar o
código, nome e histórico de clientes de pessoas jurídicas.
Para criar uma visão use o comando CREATE VIEW.

CREATE VIEW
AS
SELECT

VIEWClientes
Clientes.ID_Cliente,
Clientes.Nome,
Clientes.Historico

FROM

Clientes

WHERE

(Tipo = 'J')

CREATE VIEW VIEWcase
AS
SELECT
Clientes.Nome,
Clientes.Credito,
'Avaliação'=
Case
When Credito Between 0 and 100 then 'Regular'
When Credito Between 101 and 200 then 'Bom'
Else 'Ótimo'
End
FROM

Clientes
Pág.: 44 / 86

CREATE VIEW
AS
SELECT

Apostila de MS SQL Server

VIEWCube

Produtos.Descricao,
Pedidos.Dataped,
(Itens.Quantidade) as Quantidade

SUM
FROM

Pedidos
INNER JOIN ITENS ON Pedidos.ID_Pedido = Itens.ID_Pedido
INNER
JOIN
PRODUTOS
ON
Itens.ID_Produto
=
Produtos.ID_Produto
GROUP BY

Produtos.Descricao,
Pedidos.Dataped

WITH

Cube

Obs:
O operador CUBE é utilizado junto com a cláusula Group By para produzir linhas adicionais de resumo.
Ele produzirá linhas superagregadas utilizando cada possível combinação das colunas na cláusula Group
By, produzirá médias parciais e somas parciais mas também colunas de referência cruzada para retornar
linhas adicionais de resumo.

CREATE VIEW
AS
SELECT
SUM

VIEWROLLUP
Produtos.Descricao,
Pedidos.Dataped,
(Itens.Quantidade) as Quantidade

FROM

Pedidos
INNER JOIN ITENS ON Pedidos.ID_Pedido = Itens.ID_Pedido
INNER
JOIN
PRODUTOS
ON
Itens.ID_Produto
=
Produtos.ID_Produto
GROUP BY
WITH

Produtos.Descricao,
Pedidos.Dataped
ROLLUP

Obs:
Assim como o operador Cube, o RollUp funciona em conjunto com a cláusula Group By, geralmente
utilizado para produzir médias em execução ou somas em execução aplicando a função agregada para
cada coluna que consta na cláusula Group By.
Apostila de MS SQL Server

Pág.: 45 / 86

Stored Procedure
Um procedimento armazenado [stored procedure] é um conjunto de comandos SQL que são compilados
e armazenados no servidor. Ele pode ser chamado a partir de um comando SQL qualquer. A vantagem
de usar procedimentos armazenados é que eles podem encapsular rotinas de uso freqüente no próprio
servidor, e estarão disponíveis para todas as aplicações. Parte da lógica do sistema pode ser armazenada
no próprio banco de dados, em vez de ser codificada várias vezes em cada aplicação. Eles também
aumentam o desempenho de várias operações, pois são executados no servidor e pré-compilados, ao
contrário de comandos SQL que devem ser interpretados no momento da execução.
Para criar um procedimento, use o comando CREATE PROCEDURE. Exemplo o procedimento abaixo
recebe um parâmetro (@nome) e mostra todos os clientes cujo nome contenha o nome informado:

CREATE PROCEDURE ProcIncCliente
(
@ID_Cliente
Int,
@Nome
Varchar(50),
@Cnpj
Char(14),
@Tipo
Char(1),
@Status
Bit,
@Data
DateTime,
@Historico
Text,
@Foto
Image,
@Credito
Money)
AS
BEGIN
INSERT Into
Clientes(ID_Cliente , Nome, Cnpj, Tipo, Status, Data, Historico,
Foto, Credito)
Values(@ID_Cliente,
@Nome,
@Cnpj,
@Tipo,
@Status,
@Data,
@Historico, @Foto
,@Credito)
)
END
Pág.: 46 / 86

Apostila de MS SQL Server

CREATE PROCEDURE ProcIAltCliente
(
@ID_Cliente
Int,
@Nome
Varchar(50),
@Cnpj
Char(14),
@Tipo
Char(1),
@Status
Bit,
@Data
DateTime,
@Historico
Text,
@Foto
Image,
@Credito
Money
)
AS
BEGIN
Begin Transaction
Update

Where

Clientes Set
Clientes.Nome
Clientes.Cnpj
Clientes.Tipo
Clientes.Status
Clientes.Data
Clientes.Historico
Clientes.Foto
Clientes.Credito

=
=
=
=
=
=
=

Clientes.ID_Cliente =

If @@Error = 0
Begin
Commit Transaction
Return (0)
End
Else
Begin
Rollback Transaction
Return (1)
End
END

@Nome,
@Cnpj,
@Tipo,
=
@Status,
@Data,
@Historico,
@Foto,
@Credito
@ID_Cliente
Apostila de MS SQL Server

Pág.: 47 / 86

CREATE PROCEDURE ProcExcCliente(@ID_Cliente Bigint)
As
Declare
@Msg Varchar (255),
@Erro Bigint
BEGIN
Delete From
Where

Clientes
Clientes.ID_Cliente = @ID_Cliente

set

@Erro = @@Error

If

@Erro <> 0

BEGIN
Select
erro: '

@Msg = 'Operação

Não Realizada devido ao seguinte

+ Convert (Varchar (255), @Erro)
Raiserror (@Msg, 10, 1)
END
END
CREATE PROCEDURE ProcVendaProduto
(
@DataIni DateTime,
@DataFim DateTime,
@Valor
Money) As
BEGIN
Select
From

Produtos INNER JOIN Itens
On Produtos.ID_Produto = Itens.ID_Produto
INNER JOIN Pedidos
On Pedidos.ID_Pedido = Itens.ID_Pedido

Where
Group By
Having
Order By
END

Produtos.Descricao,
Sum(Itens.Quantidade * Itens.Precovenda) As Total

Pedidos.DataPed BetWeen @DataIni And @DataFim
Produtos.Descricao
Sum(Itens.Quantidade * Itens.Precovenda) > @Valor
Produtos.Descricao
Pág.: 48 / 86

Apostila de MS SQL Server

CREATE PROCEDURE ProcVendasMesAno (
@DataIni DateTime,
@DataFim DateTime
)
AS
BEGIN
Select Convert(Varchar(15), Datepart(mm,Pedidos.Dataped)) + '-' +
Convert(Varchar(15),Datepart(yy,Pedidos.Dataped))AS 'Ano_Mes',
Sum(Itens.Quantidade * Itens.Precovenda) AS Total
From Itens INNER JOIN Pedidos On Itens.ID_Pedido = Pedidos.ID_Pedido
Where
Pedidos.Dataped Between @Dataini And @DataFim
Group By Convert(Varchar(15),Datepart(Mm,Pedidos.Dataped))+ '-' +
Convert(Varchar(15),Datepart(Yy,Pedidos.Dataped))
Order By Convert(Varchar(15),Datepart(Mm,Pedidos.Dataped))+ '-' +
Convert(Varchar(15),Datepart(Yy,Pedidos.Dataped))
END
CREATE PROCEDURE ProcCursor AS
Declare cursorX Cursor for Select Produtos.* From Produtos
Declare
@ID_Produto
Bigint,
@descricao
varchar(25),
@precocompra
money,
@saldo
Bigint
BEGIN
open cursorx
Create Table #tempProduto
(
ID_Produto
Bigint,
Descricao
varchar(25),
PrecoCompra
money,
Saldo
Bigint
)
fetch cursorx into @ID_Produto, @descricao, @precocompra, @saldo
while (@@fetch_status = 0)
begin
if @saldo > 1
begin
Insert Into #tempProduto
values(
@ID_Produto,
@descricao,
@precocompra,
@saldo)
end
fetch cursorx into @ID_Produto, @descricao, @precocompra, @saldo
end
close cursorx
Deallocate cursorx
select * from #tempProduto
end
Apostila de MS SQL Server

Pág.: 49 / 86

CREATE PROCEDURE ProcCursorTabTemp AS Declare cursorX Cursor for
Select
Clientes.Nome,
Sum(Itens.Quantidade * Itens.PrecoVenda) as Total
From Clientes INNER JOIN Pedidos
On Pedidos.ID_Cliente = Clientes.ID_Cliente
INNER JOIN Itens
On Itens.ID_Pedido = Pedidos.ID_Pedido
Group By Clientes.Nome
Declare @nome

varchar(35),

@total Money

BEGIN
open cursorx
Create
money)

Table

#tempPedidosCliente(Nome

varchar(35),

Total

fetch cursorx into @nome, @total
While (@@fetch_status = 0)
begin
if @total > 1
begin
Insert Into #tempPedidosCliente Values(@nome, @total)
end
fetch cursorx into @nome, @total
end
close cursorx
Deallocate cursorx
Select * From #tempPedidosCliente
END
Pág.: 50 / 86

Apostila de MS SQL Server

Triggers
Um gatilho [trigger] é um tipo de procedimento armazenado, que é executado automaticamente quando
ocorre algum tipo de alteração numa tabela. Gatilhos “disparam” quando ocorre uma operação INSERT,
UPDATE e DELETE numa tabela.
Geralmente gatilhos são utilizados para reforçar restrições de integridade que não podem ser tratadas
pelos recursos mais simples, como regras, restrições, a opção NOT NULL etc.
Um gatilho também pode ser usado para calcular e armazenar valores automaticamente em outra
tabela.
Vamos criar um gatilho, chamado ValidaCredito, que será ativado por uma operação INSERT na tabela
dbo.clientes.

CREATE TRIGGER ValidaCredito ON Clientes FOR Insert AS
Declare
@ValorCredito money, @IDCliente int
BEGIN
Select @ValorCredito = Inserted.Credito, @IDCliente = Inserted.ID_Cliente
From
Inserted
If @ValorCredito > 10000
Update Clientes set Clientes.Credito = 10000 Where Clientes.ID_Cliente = @IDCliente
END
CREATE TRIGGER AtualizaSaldoInc ON Itens FOR INSERT AS
DECLARE
@QTD
INT,
@COD
INT,
@SALDO
INT,
@NRO
INT,
@Descricao
varchar(255),
@msg
varchar(255)
BEGIN
SELECT
@QTD = INSERTED.QUANTIDADE, @COD = INSERTED.ID_PRODUTO,
@NRO = INSERTED.ID_PEDIDO
FROM INSERTED
SELECT
@SALDO = PRODUTOS.SALDO, @DESCRICAO = PRODUTOS.DESCRICAO
FROM
PRODUTOS
WHERE
PRODUTOS.ID_PRODUTO = @COD
IF @SALDO >= @QTD
UPDATE PRODUTOS SET PRODUTOS.SALDO = PRODUTOS.SALDO - @QTD
WHERE PRODUTOS.ID_PRODUTO = @COD
ELSE
BEGIN
SELECT @MSG = 'INI Não aceito, pois saldo do produto '
+ @descricao
+ ' é: ' + Convert (Varchar(255), @saldo)
+ ' não atendendo a necessidade. FIM'
Raiserror (@msg, 14, 1)
Rollback
END
END
Apostila de MS SQL Server

Pág.: 51 / 86

CREATE TRIGGER AtualizaSaldoExc ON Itens FOR DELETE AS
DECLARE
@Qtd INT, @Cod INT
BEGIN
SELECT
@Qtd = Deleted.Quantidade, @Cod = Deleted.ID_Produto
FROM
DELETED
UPDATE
Produtos SET Saldo = Saldo + @Qtd
WHERE
ID_PRODUTO = @Cod
END
CREATE TRIGGER AtualizaSaldoAlt ON ITENS FOR UPDATE
DECLARE
@QTDNovo
INT,
@CODNovo
INT,
@QTDAnterior
INT,
@CODAnterior
INT,
@SALDO
INT,
@Descricao
varchar(25),
@Msg
varchar(255)
BEGIN
SELECT
@QTDNovo = INSERTED.QUANTIDADE,
@CODNovo = INSERTED.ID_PRODUTO
FROM
INSERTED
SELECT
FROM
UPDATE
WHERE
SELECT
FROM
WHERE
IF
UPDATE

AS

@QTDAnterior = DELETED.QUANTIDADE,
@CODAnterior = DELETED.ID_PRODUTO
DELETED
PRODUTOS SET
PRODUTOS.SALDO
PRODUTOS.ID_PRODUTO

= PRODUTOS.SALDO + @QTDAnterior
= @CODAnterior

@SALDO = PRODUTOS.SALDO,
@DESCRICAO=PRODUTOS.DESCRICAO
PRODUTOS
PRODUTOS.ID_PRODUTO = @CODNovo
@SALDO >= @QTDNovo
PRODUTOS SET
PRODUTOS.SALDO = PRODUTOS.SALDO - @QTDNovo
PRODUTOS.ID_PRODUTO = @CODNovo

WHERE
ELSE
BEGIN
SELECT @MSG = 'INI Não aceito, pois saldo do produto '
+ @Descricao
+ ' é: ' + Convert (Varchar(255), @saldo)
+ ' não atendendo a necessidade. FIM'
Raiserror (@Msg, 14, 1)
Rollback
END
END
Pág.: 52 / 86

Apostila de MS SQL Server

Controle de Transação
Controlando Transação Simples
Begin
Begin Transaction
Insert
Into
Produtos(Id_produto,
Descricao,
PrecoCompra)
Values(Id_produto 'Novo Produto', 1200, 12.78)
Insert
Into
Produtos(Id_produto,
Descricao,
PrecoCompra)
Values(Id_produto 'Novo Produto', 400, 23.78)
If @@Error = 0
Begin
Print 'Registro inserido com sucesso.'
Commit Transaction
End
Else
Begin
Print 'Registro não incluído.'
Rollback Transaction
End
End

Saldo,
Saldo,

Controlando Transações com Savepoints (Circunstancial)
Begin
Begin Tran
Save Tran Trans1
Insert
Into
Produtos(Id_produto,
Descricao,
PrecoCompra)
Values(Id_produto 'Novo Produto', 1200, 12.78)
If @@Error <> 0
Begin
Print 'Produto não incluído.'
Rollback Tran Trans1
End
Save Tran Trans2
Insert
Into
Produtos(Id_produto,
Descricao,
PrecoCompra)
Values(Id_produto 'Novo Produto', 1200, 12.78)
If @@Error <> 0
Begin
Print 'Produto não incluído.'
Rollback Tran Trans2
End
Commit Tran
End

Outros Objetos

Saldo,

Saldo,
Apostila de MS SQL Server

Pág.: 53 / 86

CREATE DEFAULT (Transact-SQL)
Cria um objeto chamado padrão. Quando associado a uma coluna ou um tipo de dados de alias, um
padrão especifica um valor a ser inserido na coluna á qual o objeto está associado (ou em todas as
colunas, no caso de um tipo de dados de alias), quando nenhum valor é fornecido explicitamente
durante uma inserção.

I m p ort ante
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em
desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez dela, use
definições padrão criadas com a palavra-chave DEFAULT de ALTER TABLE ou CREATE TABLE.

CREATE DEFAULT DefautGetData as GetData()
CREATE DEFAULT DefautISigla as 'RJ'

CREATE Rule (Transact-SQL)
Cria um objeto chamado regra. Quando associada a uma coluna ou a um tipo de dados de alias, a regra
especifica os valores aceitáveis que podem ser inseridos naquela coluna.

CREATE RULE Sigla
CREATE RULE Sigla2
CREATE RULE Faixa

as @Valor
as @Valor
as @Valor

=
in
>= 1

'RJ' / 'ES' / 'MG'
('RJ', 'ES', 'MG' )
and @Valor <= 1000

I m p ort ante
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em
desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Recomenda-se o
uso de restrições de verificação. As restrições de verificação são criadas pelo uso da palavra-chave
CHECK de CREATE TABLE ou ALTER TABLE.
Pág.: 54 / 86

Apostila de MS SQL Server

Criando Login
No SQL SERVER Login é um conjunto de caracteres composto de LoginName, password database
default, default language e UserName solicitado para os usuários que por algum motivo necessitam
acessar algum sistema de banco de dados. Geralmente os sistemas computacionais solicitam um login e
uma senha para a liberação do acesso.

Para adicionar um usuário ao banco de dados do SQL Server você tem que seguir três
passos:
Primeiro: você deve criar um login, que é um "cara" que tem permisssão de se logar no SQL Sever

CREATE LOGIN ALUNO_NOME
WITH PASSWORD = '123';

Segundo: você deve criar um usuário para o banco de dados que deseja mapeando esse usuário para o
login criado, assim seu usuário conseguirá se logar no SQL Server e entrar no banco de dados desejado.

CREATE USER ALUNO_NOME
FROM LOGIN ALUNO_NOME;
Terceiro: você deve dar ou remover permissões ao usuário porque até o segundo passo o usuário
criado só tem direito a entrar no banco de dados, dando as permissões o usuário já pode operar no
banco de dados. Se o usuário for comum você pode adicioná-lo apenas as roles de db_reader e
db_writer, que permitirá que o usuário faça select, insert, delete e update em todas as tabelas do
referido banco de dados.

EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'ALUNO_NOME'
EXEC SP_ADDROLEMEMBER 'DB_DATAWRITER', 'ALUNO_NOME'

Obs.: Se quiser ver melhor isso na parte gráfica, pode consultar dentro do "Object Explorer" a guia
"Security", dentro dela clique em "Login", botão direito em "sa", "Properties", escolha a guia "User
Mapping". Aqui você verá as roles do SQL Server pra cada usuário. Caso queira saber o que dá direito a
cada role procure no SQL Server Books Online.
Apostila de MS SQL Server

Pág.: 55 / 86

Usando comandos DDL

CREATE LOGIN
WITH PASSWORD
DEFAULT_DATABASE
DEFAULT_LANGUAGE

=
=
=

Digidata_Login
'123',
digidata,
Português

Usando system procedure
SP_AddLogin 'Digidata_Login',' 123','digidata'

Como criar um logon do SQL ServerSQL Server 2008 R2 Outras versões SQL Server 2008
A maioria os usuários do Windows precisa de um logon SQL Server para se conectar a SQL
Server. Este tópico mostra como criar um logon do SQL Server.
Para criar um logon do SQL Server que usa Autenticação do SQL Server (SQL Server Management
Studio)
1.No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta da
instância de servidor onde criar o novo logon.
2.Clique com o botão direito na pasta “Security” (Segurança), aponte para “New” (Novo) e
clique em “Login” (Logon).
3.Na página “Geral”, insira o nome de um usuário do Windows na caixa Nome de logon .
4.Selecione “SQL Server authentication”, Obs.: determine o Banco a onde será criado e a
Linguagem.
5.Insira uma senha para o logon.
6.Selecione as opções de diretiva de senha que devem ser aplicadas ao novo logon. Em geral,
a diretiva de imposição de senha é a opção mais segura.
7.Clique em “OK”.
Pág.: 56 / 86

Apostila de MS SQL Server

Criando Login com Wizard

Escolha do nome de Login, senha, banco de dados padrão e linguagem
Apostila de MS SQL Server

Escolha do BD default, UserName e Papeis de Sistema

Criando Usuário Usando comandos DDL
CREATE USER

Digidata_User

FOR LOGIN

Digidata_Login

Usando system procedure
SP_AddUser ' Digidata_Login',' Digidata_User'

Pág.: 57 / 86
Pág.: 58 / 86

Apostila de MS SQL Server

Como criar um usuário de banco de dados SQL Server
Este tópico mostra como criar um usuário de banco de dados mapeado para um logon do SQL Server.
Assume-se que já exista um logon correspondente do SQL Server.

Criar um usuário de banco de dados usando o SQL Server Management Studio
1.No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta Bancos de
Dados.
2.Expanda o banco de dados no qual o novo usuário de banco de dados será criado.
3.Clique com o botão direito do mouse na pasta “ Security” Segurança, aponte para “new” Novo e
clique em “User” Usuário.
4.Na página Geral, insira um nome para o novo usuário na caixa Nome de Usuário.
5.Na caixa Nome de Logon, digite o nome de um logon do SQL Server para mapear para o usuário de
banco de dados.
6.Clique em OK.
Obs.: Para Criar um usuário de banco de dados certifique que esteja conectado ao mesmo.
Apostila de MS SQL Server
Criando Usuário com Wizard

Escolha do Login, Nome do Usuário

Pág.: 59 / 86
Pág.: 60 / 86

Apostila de MS SQL Server

Escolha dos Objetos de BD e permissões

Concedendo Permissões aos Usuários
Para conceder ou revogar permissões a um usuário, é mais fácil usar:

GRANT ALL TO Digidata_User
REVOKE ALL FROM Digidata_User
GRANT create table TO Digidata_User
REVOKE create table FROM Digidata_User
GRANT select ON clientes TO Digidata_User
REVOKE select ON clientes TO Digidata_User
Apostila de MS SQL Server

Pág.: 61 / 86

Criando Role (Funções)
As funções são protegíveis no nível de banco de dados. Depois de criar uma função, configure as
permissões no nível de banco de dados da função usando GRANT, DENY e REVOKE. Para adicionar
membros a uma função de banco de dados, use o procedimento armazenado sp_addrolemember.
Usando comandos DDL
CREATE

ROLE

Digidata_Role

AUTHORIZATION

Digidata_User

Usando system procedure
SP_Addrole Digidata_Role

Adicionando o User a Role
EXEC SP_Addrolemember Digidata_Role, Digidata_User

Adicionando privilégios a Role
GRANT SELECT ON Clientes TO Digidata_Role
GRANT CREATE TABLE TO Digidata_Role
DENY CREATE TABLE TO Digidata_Role
Pág.: 62 / 86

Apostila de MS SQL Server

Criando Role com Wizard

Escolha do RoleName,

Selecionando os objetos e permissões 1/3
Apostila de MS SQL Server

Selecionando os objetos e permissões 2/3

Selecionando os objetos e permissões 3/3

Pág.: 63 / 86
Pág.: 64 / 86

Apostila de MS SQL Server
Apostila de MS SQL Server

Pág.: 65 / 86

Criando BackUp e Restore
Fazer um backup consiste em copiar o banco de dados para um local seguro.
Uma cópia de backup deve ser feita na medida do possível em outra máquina da rede, para uma fita
magnética ou outro meio magnético. O backup copia tudo o que esta dentro do banco de dados,
incluindo o log de transação.
O log de transação é um registro serial de todas as modificações feitas no banco de dados. Esse log é
usado no processo de restauração para fazer todas as alterações que ocorrem no banco de dados desde
o ultimo backup.
A restauração do banco de dados, quando bem sucedida, retorna o banco ao estado em que estava no
momento da execução do backup. Se durante a execução de backup alguam transação não tiver sido
concluída,ela será desfeita para garantir a consistência da base de dados.
O SQL Server 2005 permite a confecção de dois tipos de backup: o backup completo e o diferencial. O
backup completo, como o nome diz, é uma fotografia exata de todo o banco de dados. O backup
diferencial é uma cópia das alterações feitas no banco de dados, desde a realização do ultimo backup
completo.
Pág.: 66 / 86

Apostila de MS SQL Server

Criando backup completo

Criando backup diferencial
Apostila de MS SQL Server
Efetuando o Restore full e diferencial

Efetuando um Restore pontual

Pág.: 67 / 86
Pág.: 68 / 86

Apostila de MS SQL Server

Anexo - 1
Registrar Servidores
Arquitetura Distribuída do SQL Server
O SQL Server utiliza uma arquitetura na qual vários servidores distribuídos podem ser acessados a partir
de um único servidor. Para que isto seja possível, estes servidores devem ser configurados como Linked
Servers.

Para executarmos esta atividade, você deve criar na sua máquina um linked server apontando para o a
máquina de um colega (sugestão: caso queira executar a atividade em uma mesma máquina, faça uma
segunda instalação do SQL Server, dando à nova instância que será criada um nome diferente do padrão
'SQLEXPRESS'). A configuração de um Linked Server pode ser feita usando a stored procedure
sp_addlinkedserver ou através do SQL Server Management Studio Express, selecionando a opção de
menu 'New Linked Server':
Apostila de MS SQL Server

Pág.: 69 / 86

A janela de diálogo 'New Linked Server' será exibida. Na página 'General' defina o nome e o tipo do
servidor. Na página 'Security' defina mapeamentos de usuários entre os servidores local e remoto, caso
necessário; e defina como proceder para logins que não foram mapeados (sugestão: use a opção 'Be
made using the login´s current security context').
Pág.: 70 / 86

Apostila de MS SQL Server

Para acessar dados no servidor remoto, devemos referenciar o nome do servidor, o banco de dados, o
esquema e o nome da tabela. Uma seleção na relação 'Rel' do banco de dados 'BD' do servidor 'SERVER
SQLEXPRESS' teria a seguinte sintaxe em SQL:
select * from [NomeServidorSQLEXPRESS].NomeBanco.Esquema.NomeTabela
-Como exemplo poderíamos considerar:

select * from [Servidor01SQLEXPRESS].BancoCurso.dbo.Clientes
Apostila de MS SQL Server

Pág.: 71 / 86

Anexo – 2
Conhecendo o SQL Server 2005 Express Edition
Antes de mais nada, vamos esclarecer uma coisa. O SQL Server 2005 Express Edition (SQL
Server Express) não é o SQL Server 2005 propriamente dito. O SQL Server Express é uma
plataforma de banco de dados baseada nas tecnologias do SQL Server 2005 e chega para
substituir o MSDE 2000. Ele é um produto gratuito e possui características de rede e segurança
que o diferenciam das demais edições do SQL Server 2005.
Neste artigo pretendo fazer uma introdução básica sobre o SQL Server Express 2005, falando
sobre suas principais características e fazendo uma comparação com o atual MSDE 2000.
Esta edição do SQL Server Express tem como grande promessa uma superior facilidade de
utilização com um processo de instalação simples e robusto e com uma ferramenta gráfica (SQL
Express Manager), que permitirá realizar a adminsitração do servidor de uma forma simples e
prática. Esta ferramenta gráfica ainda esta em desenvolvimento e será disponibilizada como um
download gratuíto no site da Microsoft.
O SQL Server Express foi desenvolvido tendo em mente duas utilizações básicas: A primeira,
como um servidor de produtos, especialmente como um Web Server ou Database Server. O
segundo, como um cliente stand-alone, onde a aplicação não precise depender de uma rede
para obter acesso aos dados.

O Engine (Motor)
O SQL Server Express usa o mesmo engine que as demais edições do SQL Server 2005, mas
por ser uma edição digamos, light, possui algumas limitações. O engine suporta 1CPU, 1GB
RAM e banco de dados com até 4GB. Uma mudança significativa em relação ao MSDE 2000 é
que o engine do SQL Express não possui a limitação de usuários concorrentes, conhecida como
“Concurrent Workload Governor” onde a performance do MSDE 2000 é extremamente
prejudicada na medida em que as conexões concorrentes de usuários aumentam. Para saber
mais sobre esta limitação do MSDE 2000, clique aqui.
O SQL Server Express até pode ser instalado em máquinas multiprocessadas mas somente 1
CPU será reconhecida pelo engine. Como consequência, características como execução de
consultas em paralelo não é suportado pelo SQL Server Express.
O limite de 1GB RAM é apenas para o buffer pool. O buffer pool é usado para o armazenamento
de páginas de dados e outras informações. A memória necessária para o gerenciamento de
conexões, locks e outros não estão incluídos neste limite de 1GB. Sendo assim, o SQL Express
pode ser instalado normalmente em máquinas com mais de 1GB, mas ele nunca usará mais que
1GB para o buffer pool. AWE ou /3GB não é suportado.
O limite de 4GB para o banco de dados é aplicado apenas para o arquivo de dados. Entretanto,
não existe limite para o número de banco de dados que você pode colocar no servidor.
O SQL Server Express suporta instalação side-by-side com outras versões do SQL Server,
podendo coexistir na mesma máquina junto com instalações do SQL Server 2000, SQL Server
2005 ou MSDE 2000. Suporta um número máximo de 50 instâncias na mesma máquina desde
que cada instância seja unicamente identifica, ou seja, você pode realizar até 50 instalações do
SQL Express desde que cada instância tenha um nome diferente. Por padrão o SQL Server
Express é instalado com uma named instance chamada SQLEXPRESS.
Pág.: 72 / 86

Apostila de MS SQL Server

Ferramentas
Diferente do MSDE 2000 que não possui ferramenta gráfica, o SQL Server Express possuirá
uma ferramenta gráfica chamada SQL Server Management Studio Express (SSMSE). Esta, ainda
em fase de desenvolvimento, mas já disponível para download público, será uma versão ligth
do atual SQL Server Management Studio disponível nas demais edições do SQL Server 2005 e
permitirá uma fácil administração dos bancos de dados.
O SSMSE suportará conexões para SQL Server Express e outras edições do SQL Server 2005,
SQL Server 2000 e MSDE 2000. Uma janela de conexão guiará o usuário através da seleção de
uma instância e o método de autenticação a ser utilizado, suportando conexões locais ou
remotas. Diversas funcionalidades de gerenciamento de banco de dados estarão disponíveis
através do menu de contexto (botão direito) e wizards. Entre elas podemos citar, criar e
modificar banco de dados, tabelas, usuários e logins. O Query Editor do SSMSE também
permitirá o desenvolvimento e execução de instruções T-SQL e scripts.
Apostila de MS SQL Server

Pág.: 73 / 86

Funcionalidades
O SQL Server Express suporta a maioria das funcionalidades do SQL Server 2005. A tabela
abaixo mostra algumas características e componentes suportados:
Stored Procedures
SQL Computer Manager
Views
Replication (as a subscriber only)
Triggers
Advanced Query Optimizer
Cursors
SMO / RMO
Sqlcmd and osql utilities
Integration with Visual Studio 2005
Snapshot Isolation Levels
Service Broker (as a client only)
Native XML support, including XQuery and XML Schemas
SQL CLR
T-SQL language support
Multiple Active Result Sets (MARS)
Tabela 01
A tabela abaixo destaca os principais componentes do SQL Server 2005 que não são suportados
nesta
versão
do
SQL
Express
Edition:
-

Reporting Services
Notification Services
Analysis Services
SQL Agent
Full text search
DTS
OLAP Services / Data Mining
English Query
Pág.: 74 / 86

Apostila de MS SQL Server

SQL Server Management Studio Express (SSMSE).
O Microsoft SQL Server 2008 Management Studio Express (SSMSE) é um ambiente de desenvolvimento
integrado gratuito para acessar, configurar, gerenciar e desenvolver todos os componentes do SQL
Server. O SQL Server 2008 Management Studio Express combina um amplo grupo de ferramentas
gráficas com editores de scripts sofisticados que fornecem acesso ao SQL Server a desenvolvedores e
administradores de todos os níveis de experiência. Desenvolvedores terão uma experiência familiar e os
administradores de banco de dados terão um único utilitário abrangente que combina ferramentas
gráficas fáceis de usar com sofisticadas capacidades de script.

Figura 01
Apostila de MS SQL Server

Pág.: 75 / 86

Anexo - 3
Suporte a Rede
Embora o usuário possa habilitar o suporte a protocolos como TCP/IP e Named Pipes , por
padrão o SQL Server Express é instalado apenas com suporte a shared memory. Isto faz com
que por default o SQL Server Express funcione apenas localmente na máquina onde foi
instalado e não suporte conexões de clientes em uma rede. Para suportar conexões de clientes
remotos, é necessário habilitar o suporte a rede no SQL Server Express. Para habilitar o suporte
a rede, você tem as seguintes opções:
-Usar o SQL Server Configuration Manager para habilitar os protocolos necessários
(normalmente TCP/IP) e iniciar o serviço SQL Server Browser.
A figura abaixo mostra o uso do SQL Server Configuration Manager para habilitar protocolos de
rede.
Você pode acessar a funcionalidade descrita acima, clicando em Iniciar / Programas /
Microsoft SQL Server 2005 / Configuration Tools / SQL Server Configuration
Manager no menu suspenso do seu Windows.

Figura 02
O SQL Browser é um novo serviço do SQL Server 2005 que identifica as portas que as named
instances estão usando. Este serviço vem desativado por default e deve ser ativado para que a
comunicação entre um cliente remoto e um servidor SQL Server Express funcione corretamente.
Complementando a configuração necessária, observe a Figura 03, onde a propriedade
Enabled é habilitada (Yes). Observe ainda a Figura 04 onde as propriedades Active e Enabled
também devem estar habilitadas (Yes).
Pág.: 76 / 86

Figura 03

Figura 04

Apostila de MS SQL Server
Apostila de MS SQL Server

Pág.: 77 / 86

Anexo – 4
Acessando o utilitário Microsoft SQL Server Management Studio Express
Por último, acessando o utilitário Microsoft SQL Server Management Studio Express,
clique no nó Logins escolhendo em seguida o login SA (naturalmente com o botão direito do
mouse) acessando Propriedades no menu suspenso. A Figura abaixo será exibida, devendo
ser observado em Login name a opção SQL Server Authentication. Defina um valor para
password e pronto.

Figura 05
Pág.: 78 / 86

Apostila de MS SQL Server

Anexo – 5

Exercícios Extras
Variações do Comando Select
Subqueries (Exists, Not Exists, In e Not In)
Select Clientes.Nome From Clientes Where Exists
(Select * From Pedidos Where Clientes.ID_Cliente = Pedidos.ID_Cliente)
Select Clientes.Nome From Clientes Where Not Exists
(Select * From Pedidos Where Clientes.ID_Cliente = Pedidos.ID_Cliente)
Select Produtos.Descricao From Produtos Where Produtos.ID_Produto In
(Select Itens.ID_Produto From Itens Where Itens.Quantidade > 100 )
Select Produtos.Descricao From Produtos Where Produtos.ID_Produto Not In
(Select Itens.ID_Produto From Itens Where Itens.Quantidade > 100 )
Obtendo Dados pela União de Tabelas ou Views (Union)
Select Clientes.Nome, Clientes.Cnpj From Clientes
Union
Select Fornecedores.Nome, Fornecedores.Cnpj From Fornecedores
Obtendo Melhor Performance com o Operador Like
Select Clientes.Nome From Clientes Where Clientes.Nome Like 'Mar%'
Pode alcançar melhor performance se substituida por:
Select Clientes.Nome From Clientes Where
Clientes.Nome >= 'Mar' And Clientes.Nome Like 'Mar%'
Apostila de MS SQL Server

Pág.: 79 / 86

Criar as seguintes tabelas e Índices
Associado
Create Table Associado(
Id
Int
Nome
Varchar(50)
Cidade
Varchar(25)
Estado
Char(2)
Data
DateTime)

Not Null,
Not Null,
Not Null,
Not Null,

Especialidade
Create Table Especialidade(
Id
Int
Descricao
Varchar(25)

Not Null,
Not Null)

Associado_Especialidade
Create Table Associado_Especialidade(
Id
Int
Not Null,
AssociadoID Int
Not Null,
EspecialidadeID
Int
Not Null)

Nota 1:
Entidades Associado e Especialidade referem-se as tabelas que identificam os agentes do projeto. Já
Associado_Especialidade, armazena os relacionamentos possíveis entre associados e especialidades.
Nota 2:
Quanto a chave primária, para Associado e Especialidade, os respectivos campos iniciados com Id
compõem a chave primária; e para a tabela Associado_Especialidade, que numa visão clássica, as
duas colunas, a saber, AssociadoID e EspecialidadeID iriam compor a chave primária. Mas numa visão
mais atualizada, cada entidade deve ter um atributo que defina sua chave primária, logo o campo ID é
inserido neste contexto para servir de chave primária para esta entidade.
Nota 3:
Finalizando a estrutura, observa-se que as colunas AssociadoID e EspecialidadeID da tabela
Associado_ Especialidade, são individualmente chave estrangeira, respectivamente com referência as
tabelas Associado e Especialidade.
Nota 4:
Adicionar 4 registros a tabela Associado, 4 registros a tabela Especialidade e pelo menos 8 registros
na tabela Associado_Especialidade.
Nota 5:
Criar índices para os campos nome, cidade e estado da tabela Associado e índice para o campo
descricao da tabela Especialidade.
Pág.: 80 / 86

Apostila de MS SQL Server

Obs.: Usar a seguinte nomenclatura: Idx_campo_tabela
CREATE INDEX idx_Nome_Associado

ON

Associado(Nome)

CREATE INDEX idx_Cidade_Associado

ON

Associado(Cidade)

CREATE INDEX[idx_Estado_Associado

ON

Associado(Estado)

CREATE INDEX idx_Descricao_Especialidade

ON

Especialidade(Descricao)

Criar as Seguintes Views
-View que retorne a quantidade de cadastros de Associados por mês
Select

From
Group by

Convert(Varchar(15), Datepart(mm,A.Data)) + '-' +
Convert(Varchar(15), Datepart(yy,A.Data)) AS 'Mes-Ano',
Count(A.nome) As Qtd
Associado A
Convert(Varchar(15), Datepart(mm,A.Data)) + '-' +
Convert(Varchar(15), Datepart(yy,A.Data))

-View que retorne quantas especialidades tem cada associado, com mais de uma especialidade.
Select A.Nome,
Count(AESP.Id_Associado) As Qtd
From Associado A INNER JOIN Associado_Especialidade AESP
On
A.Id_Associado = AESP.AssociadoID
Group by
A.Nome
Having
Count(AESP.AssociadoID) > 1
Apostila de MS SQL Server

Pág.: 81 / 86

Criar as Seguintes Procedures
-Criar uma procedure para a inclusão de associados, possibilitando alteração e exclusão. Também
implementar tratamento de erros (exception) e controle de Transação.
Create procedure
@Id
@cidade
@data
) As

Proc_Manut_Associados(
Int,
@nome
Varchar(25), @estado
DateTime,
@operacao

Varchar(50),
Char(2),
Char(1)

Declare @Msg Varchar(255), @Erro int

BEGIN
If @operacao = 'I'
Begin

Insert Into Associado(Id, nome, cidade, estado, data)
Values(@Id, @nome, @cidade, @estado, @data)
set @Erro = @@Error
If @Erro <> 0
Begin
Select @Msg = 'Operação não realizada devido ao seguinte erro: '
+ Convert(Varchar(255),@Erro)
Raiserror(@Msg,10,1)

End
End
Else If @operacao = 'A'
Begin
Update

Where

Associado Set
Associado.Nome = @nome, Associados.Cidade = @cidade,
Associado.Estado = @estado, Associados.Data = @data,
Associado.Id = @id

set @Erro = @@Error

If @erro <> 0
Begin

End
Else
Begin

End

Select @Msg = 'Operação não realizada devido ao seguinte erro: '
+ Convert(Varchar(255),@Erro)
Raiserror(@Msg,10,1)

Delete Associado
Where Associado.Id = @id

set @Erro = @@Error
If @erro <> 0
Begin

End

End

End

Select @Msg = 'Operação não realizada devido ao seguinte erro: '
+ Convert(Varchar(255),@Erro)
Raiserror(@Msg,10,1)
Pág.: 82 / 86

Apostila de MS SQL Server

-Criar uma Procedure que retorna a quantidade de associados que tenham especialidades por estado.
Esta Procedure deverá prover um parâmetro para escolha do estado.
CREATE Procedure
Begin
Select
From
On
Where
End

Proc_QtdeAssociados_Estado(@estado char(2)) As
Count(Associado.Id)
Associado INNER JOIN Associado_Especialidade
Associado.Id =
Associado_Especialidade.AssociadoID
Associado.estado = @estado
Apostila de MS SQL Server

Pág.: 83 / 86

Criar as Seguintes Triggers
-Criar Trigger que dispare uma exceção, quando da inclusão ou alteração na tabela especialidades,
provocar um conteúdo para o campo descrição com menos de três caracteres.
CREATE TRIGGER Trig_Valida_Descricao ON Especialidade FOR INSERT, UPDATE AS
Declare @Tam int
Begin
Select @Tam = Convert(int , DataLength ( Inserted.Descricao))
From Inserted
If @Tam < 3
Begin
Raiserror ('Erro' ,10,1)
Rollback
End
End
-Criar uma Trigger que limite o total de especialistas de uma especialidade(Descricao) em no máximo 4
(quatro), por Estado.
Create Trigger Trig_Controla_Limite_Especialistas on Associado_Especialidade
For Insert, Update AS
Declare

@total

Numeric,

@estado

Char(2)

Begin
Select @estado = Associado.Estado
From Associados , Inserted
Where Associado.Id = Inserted.Id
Select
From
INNER JOIN
On
INNER JOIN
On
Where

@total = Count(Associado.Estado)
Associado
Associado_Especialidade
Associados.Id = Associado_Especialidade.AssociadoID
Inserted
Associado_Especialidade. EspecialidadeID = Inserted.EspecialidadeID
Associado.Estado = @estado

If @total > 4
Begin
Raiserror('Minha Mensagem.....',10,1)
End
End
Pág.: 84 / 86

Apostila de MS SQL Server

Anexo – 6 Tabelas Particionadas
Tabela Particionada? O que é isso?
A maneira mais simples de entender este conceito é através de um exemplo.
Imagine que você tenha que armazenar em uma tabela todas as notas fiscais emitidas por uma
cadeia nacional de “fast food” em suas centenas de lojas pelo Brasil. A tabela deve ficar grande,
não?
Agora imagine o trabalho que as operações do dia-a-dia realizam nesta tabela. Não só
Inserções, Consultas e Alterações, mas também operações de Backup, Ordenação,
Desfragmentação…
Agora pense na seguinte solução: Armazenar as notas fiscais referentes a cada mês em
uma partição desta tabela. Algo como ter um caderninho para controle de cada mês. Não fica
bem mais fácil? Na maior parte do tempo, você só manipulará os dados do mês atual. Você
pode até manter a partição do mês atual como “read-write” e as outras como “read-only”.
Talvez você não precise de backups diários das partições relativas a meses anteriores, o que
reduzirá drasticamente a janela de backup!

Ilustração de Tabela Particionada

Aumentando o Desempenho com múltiplos discos

Agora uma afirmação que pode causar espanto. Pode ser intuitivo pensar que é vantajoso, do
ponto de vista de desempenho, colocar cada partição em um disco físico separado, não é
mesmo?.
A princípio, temos a impressão que estaremos utilizando todos os discos ao mesmo tempo, o
que melhora o desempenho.
Pois não é bem assim... Apesar dos ganhos de desempenho serem claros nas operações que
acabamos de discutir em tabelas particionadas, o SQL Server executa operações de ordenação
em uma partição de cada vez. Em outras palavras: somente um disco seria utilizado por vez, o
que reduziria o desempenho...
A maneira mais eficiente de utilizar múltiplos discos é configurando volumes distribuídos em
vários discos, em estruturas RAID. Desta forma, mesmo quando uma operação de ordenação é
realizada numa única partição, todos os discos da estrutura RAID são utilizados em paralelo.
Interessante, não? :)
Próximos Passos…

Obs.: No SQLEXPRESS, Não permite criação de particionamento.
Apostila de MS SQL Server

Pág.: 85 / 86

1. Criar a seguinte Tabela:

CREATE TABLE LANCAMENTO_CONTABIL
(
ID_LANCAMENTO_CONTABIL BIGINT
NOT NULL,
DATA_LANCAMENTO
DATETIME,
DATA_FATO
DATETIME,
ID_CONTA_CONTABIL
INT,
VALOR
MONEY
)

2. Criar a função de particionamento com DataType DATETIME como parâmetro

CREATE PARTITION FUNCTION
PF_Tabela_Lancamento_Contabil(DATETIME)
AS RANGE RIGHT
FOR VALUES (
'2006-07-01',
'2006-10-01',
'2007-01-01',
'2007-04-01')

Obs.: Surgirar a seguinte Msg:
”Msg 7736, Level 16, State 1, Line 3
Partition function can only be created in Enterprise edition of SQL Server. Only Enterprise edition of SQL
Server supports partitioning.”

3. Adicionar 10 FILEGROUPS ao Banco de Dados

ALTER DATABASE DBA ADD FILEGROUP FG_TAB_LancContab_QBASE
ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q1
ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q2
ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q3
Pág.: 86 / 86

Apostila de MS SQL Server

4. Implementar a Partition Scheme PS_Tabela_Lancamento_Contabil, com a Partition
Function PF_Tabela_Lancamento_Contabil como parâmetro

CREATE PARTITION SCHEME
PS_TabelaXPTOQuarterly
AS PARTITION PFTabelaXPTOQuarterly TO
(
FG_TAB_LancContab_QBASE
FG_TABLancContab _Q1,
FG_TABLancContab _Q2,
FG_TABLancContab _Q3 )

• Nesta situação, o primeiro FG tem todos os dados desde Abril 2006 até Julho 2006.
• Os seguintes FG’s tem a data que correspondente ao valor de cada partition.
• O último FG tem todos os dados com data superior a Abril 2008.

Weitere ähnliche Inhalte

Was ist angesagt?

D dinis
D dinisD dinis
D dinis20014
 
Fichas de trab ação formaç
Fichas de trab ação formaçFichas de trab ação formaç
Fichas de trab ação formaçcarmocarocinho
 
Alice vieira
Alice vieiraAlice vieira
Alice vieiraaasf
 
Sophia de Mello Breyner Andresen
Sophia de Mello Breyner AndresenSophia de Mello Breyner Andresen
Sophia de Mello Breyner Andreseninesgois2002
 
Reconquista Cristã
Reconquista CristãReconquista Cristã
Reconquista Cristãcattonia
 
Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010
Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010
Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010Joeldson Costa Damasceno
 
Tecnicas de conversão e compressão; Redes de comunicação 1º Módulo
Tecnicas de conversão e compressão; Redes de comunicação 1º MóduloTecnicas de conversão e compressão; Redes de comunicação 1º Módulo
Tecnicas de conversão e compressão; Redes de comunicação 1º MóduloIgor Santos
 
Criando rede WLAN e SERVIDOR DNS E HTTP no Packet Tracer
Criando rede WLAN e SERVIDOR DNS E HTTP no Packet TracerCriando rede WLAN e SERVIDOR DNS E HTTP no Packet Tracer
Criando rede WLAN e SERVIDOR DNS E HTTP no Packet TracerEdenilton Michael
 
Aula 5 - Redes de computadores
Aula 5 - Redes de computadoresAula 5 - Redes de computadores
Aula 5 - Redes de computadoresLucasMansueto
 
Manual da Interface Thunderbolt FOCUSRITE Clarett 8Pre
Manual da Interface Thunderbolt FOCUSRITE Clarett 8PreManual da Interface Thunderbolt FOCUSRITE Clarett 8Pre
Manual da Interface Thunderbolt FOCUSRITE Clarett 8PreHabro Group
 
Comandos ms-dos - Atualizado 29/10/2014
Comandos ms-dos - Atualizado 29/10/2014Comandos ms-dos - Atualizado 29/10/2014
Comandos ms-dos - Atualizado 29/10/2014Evandro Júnior
 
Processadores - CPU
Processadores - CPUProcessadores - CPU
Processadores - CPURoney Sousa
 
Introdução à Virtualização
Introdução à VirtualizaçãoIntrodução à Virtualização
Introdução à VirtualizaçãoLucas Miranda
 
Componentes de uma Rede de computadores
Componentes de uma Rede de computadoresComponentes de uma Rede de computadores
Componentes de uma Rede de computadoresFelipe Silva
 
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )Universidade Zambeze
 
Classificação – sistemas operativos
Classificação – sistemas operativosClassificação – sistemas operativos
Classificação – sistemas operativosTROLITO LALALAL
 

Was ist angesagt? (20)

D dinis
D dinisD dinis
D dinis
 
Fichas de trab ação formaç
Fichas de trab ação formaçFichas de trab ação formaç
Fichas de trab ação formaç
 
D. José I
D. José ID. José I
D. José I
 
Alice vieira
Alice vieiraAlice vieira
Alice vieira
 
Sophia de Mello Breyner Andresen
Sophia de Mello Breyner AndresenSophia de Mello Breyner Andresen
Sophia de Mello Breyner Andresen
 
Reconquista Cristã
Reconquista CristãReconquista Cristã
Reconquista Cristã
 
Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010
Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010
Informática Básica - Criação e Edição de Documentos no Microsoft Word 2010
 
Tecnicas de conversão e compressão; Redes de comunicação 1º Módulo
Tecnicas de conversão e compressão; Redes de comunicação 1º MóduloTecnicas de conversão e compressão; Redes de comunicação 1º Módulo
Tecnicas de conversão e compressão; Redes de comunicação 1º Módulo
 
Criando rede WLAN e SERVIDOR DNS E HTTP no Packet Tracer
Criando rede WLAN e SERVIDOR DNS E HTTP no Packet TracerCriando rede WLAN e SERVIDOR DNS E HTTP no Packet Tracer
Criando rede WLAN e SERVIDOR DNS E HTTP no Packet Tracer
 
Aula 5 - Redes de computadores
Aula 5 - Redes de computadoresAula 5 - Redes de computadores
Aula 5 - Redes de computadores
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Manual da Interface Thunderbolt FOCUSRITE Clarett 8Pre
Manual da Interface Thunderbolt FOCUSRITE Clarett 8PreManual da Interface Thunderbolt FOCUSRITE Clarett 8Pre
Manual da Interface Thunderbolt FOCUSRITE Clarett 8Pre
 
Criação de uma rede
Criação de uma redeCriação de uma rede
Criação de uma rede
 
Comandos ms-dos - Atualizado 29/10/2014
Comandos ms-dos - Atualizado 29/10/2014Comandos ms-dos - Atualizado 29/10/2014
Comandos ms-dos - Atualizado 29/10/2014
 
Processadores - CPU
Processadores - CPUProcessadores - CPU
Processadores - CPU
 
Introdução à Virtualização
Introdução à VirtualizaçãoIntrodução à Virtualização
Introdução à Virtualização
 
Tipos de Servidores
Tipos de ServidoresTipos de Servidores
Tipos de Servidores
 
Componentes de uma Rede de computadores
Componentes de uma Rede de computadoresComponentes de uma Rede de computadores
Componentes de uma Rede de computadores
 
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
 
Classificação – sistemas operativos
Classificação – sistemas operativosClassificação – sistemas operativos
Classificação – sistemas operativos
 

Andere mochten auch

Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
Asp.net 4 step_by_step
Asp.net 4 step_by_stepAsp.net 4 step_by_step
Asp.net 4 step_by_stepFernando Chuva
 
Apostila algoritmos programacao_parte1_fev2013
Apostila algoritmos programacao_parte1_fev2013Apostila algoritmos programacao_parte1_fev2013
Apostila algoritmos programacao_parte1_fev2013Fernando Chuva
 
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_soxAuditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_soxSQLServerRS
 
Apostila c# iniciantes
Apostila c# iniciantesApostila c# iniciantes
Apostila c# iniciantesCaique Moretto
 
Sql Server Stored Procedures
Sql Server   Stored ProceduresSql Server   Stored Procedures
Sql Server Stored Proceduresalexdutra
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Andre Nascimento
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012Rodrigo Ribeiro
 
Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...
Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...
Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...Diego Nogare
 
Apostila introdução à linguagem sql
Apostila introdução à linguagem sqlApostila introdução à linguagem sql
Apostila introdução à linguagem sqlReuel Lopes
 

Andere mochten auch (20)

Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
 
Csharp ebook
Csharp ebookCsharp ebook
Csharp ebook
 
Asp.net 4 step_by_step
Asp.net 4 step_by_stepAsp.net 4 step_by_step
Asp.net 4 step_by_step
 
Apostila algoritmos programacao_parte1_fev2013
Apostila algoritmos programacao_parte1_fev2013Apostila algoritmos programacao_parte1_fev2013
Apostila algoritmos programacao_parte1_fev2013
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_soxAuditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
 
Dynamic Types no C# 4.0
Dynamic Types no C# 4.0Dynamic Types no C# 4.0
Dynamic Types no C# 4.0
 
Apostila c# iniciantes
Apostila c# iniciantesApostila c# iniciantes
Apostila c# iniciantes
 
Sql Server Stored Procedures
Sql Server   Stored ProceduresSql Server   Stored Procedures
Sql Server Stored Procedures
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
Introdução C#
Introdução C#Introdução C#
Introdução C#
 
Apostila de C# & Asp.Net
Apostila de C# & Asp.NetApostila de C# & Asp.Net
Apostila de C# & Asp.Net
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...
Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...
Mini-Curso: Introdução à Big Data e Data Science - Aula 12 - Sessão de pergun...
 
Apostila Android
Apostila AndroidApostila Android
Apostila Android
 
Hands on Labs - SQL Server 2008
Hands on Labs - SQL Server 2008Hands on Labs - SQL Server 2008
Hands on Labs - SQL Server 2008
 
Apostila introdução à linguagem sql
Apostila introdução à linguagem sqlApostila introdução à linguagem sql
Apostila introdução à linguagem sql
 

Ähnlich wie Apostila de Sql Server 2005

Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Januário Neto
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Arquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dadosArquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dadosdiogocbj
 
gcc214-slides-1-introducao-conceitos-arquitetura.pdf
gcc214-slides-1-introducao-conceitos-arquitetura.pdfgcc214-slides-1-introducao-conceitos-arquitetura.pdf
gcc214-slides-1-introducao-conceitos-arquitetura.pdfSlowtfk
 
Banco dados i prof ivan (acesse www.portalgsti.com.br)
Banco dados i prof ivan (acesse  www.portalgsti.com.br)Banco dados i prof ivan (acesse  www.portalgsti.com.br)
Banco dados i prof ivan (acesse www.portalgsti.com.br)Andre Sidou
 
Universidade federal do amazonas Banco de Dados - Apresentação final
Universidade federal do amazonas   Banco de Dados - Apresentação finalUniversidade federal do amazonas   Banco de Dados - Apresentação final
Universidade federal do amazonas Banco de Dados - Apresentação finalRenan Levy
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dadosFernando Palma
 

Ähnlich wie Apostila de Sql Server 2005 (20)

C # banco de dados
C # banco de dadosC # banco de dados
C # banco de dados
 
Apostila sqlserver65v1a
Apostila sqlserver65v1aApostila sqlserver65v1a
Apostila sqlserver65v1a
 
Ara7129 unidade-1-v1
Ara7129 unidade-1-v1Ara7129 unidade-1-v1
Ara7129 unidade-1-v1
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1Projeto de Banco de Dados - Capítulo 1
Projeto de Banco de Dados - Capítulo 1
 
Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Arquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dadosArquitetura e sgbd de um banco de dados
Arquitetura e sgbd de um banco de dados
 
gcc214-slides-1-introducao-conceitos-arquitetura.pdf
gcc214-slides-1-introducao-conceitos-arquitetura.pdfgcc214-slides-1-introducao-conceitos-arquitetura.pdf
gcc214-slides-1-introducao-conceitos-arquitetura.pdf
 
Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
Banco de dados aula 2
Banco de dados  aula 2Banco de dados  aula 2
Banco de dados aula 2
 
Banco dados i prof ivan (acesse www.portalgsti.com.br)
Banco dados i prof ivan (acesse  www.portalgsti.com.br)Banco dados i prof ivan (acesse  www.portalgsti.com.br)
Banco dados i prof ivan (acesse www.portalgsti.com.br)
 
Aula banco de dados
Aula banco de dadosAula banco de dados
Aula banco de dados
 
Banco de dados parte 01
Banco de dados parte 01Banco de dados parte 01
Banco de dados parte 01
 
Universidade federal do amazonas Banco de Dados - Apresentação final
Universidade federal do amazonas   Banco de Dados - Apresentação finalUniversidade federal do amazonas   Banco de Dados - Apresentação final
Universidade federal do amazonas Banco de Dados - Apresentação final
 
Apostila de Banco dados
Apostila de Banco dadosApostila de Banco dados
Apostila de Banco dados
 
Apostila de banco de dados da ucg
Apostila de banco de dados da ucgApostila de banco de dados da ucg
Apostila de banco de dados da ucg
 
BD I - Aula 07 A - Projetando BD
BD I - Aula 07 A - Projetando BDBD I - Aula 07 A - Projetando BD
BD I - Aula 07 A - Projetando BD
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 

Kürzlich hochgeladen

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Kürzlich hochgeladen (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Apostila de Sql Server 2005

  • 1. Apostila de MS SQL Server Pág.: 1 / 86 Conceitos O que é um Banco de Dados? Em termos simples, um banco de dados é uma coleção de dados, onde os dados são armazenados em tabelas. Alguns gostam de pensar em um banco de dados como um mecanismo organizado que tem a capacidade de armazenar informações, pela qual um usuário pode recuperar as informações armazenadas de uma amaneira eficaz e eficiente. Um banco de dados relacional é um banco de dados dividido em unidades lógicas chamadas tabelas, em que as tabelas são relacionadas entre si dentro do banco de dados. Um banco de dados relacional permite dividir os dados em unidades lógicas menores, mais gerenciáveis, oferecendo melhor e mais fácil manutenção e desempenho ótimo do banco de dados de acordo com o nível de organização. O Que é SQL? SQL (Structured Query Language) é a linguagem padrão utilizado para comunicar-se com um banco de dados relacional. O protótipo original foi desenvolvido pela IBM utilizando o artigo do Dr. E. F. Codd (“A Relational Modelo of Data for Large Shared Data Banks”) Modelo Relacional de Informações de Dados para Grandes Bancos de Dados Compartilhados. Visão geral do Transact-SQL Transact-SQL é a linguagem do SQL Server para definição, consulta e manipulação de dados. Essa linguagem é baseada no padrão ANSI SQL-92, também suportado por outros bancos de dados, e acrescenta extensões ao padrão ANSI, exclusivas do SQL Server. SQL é a sigla de estruture Query Language, embora ela faça bem mais do que consulta. Os comandos Transact-SQL podem ser divididos nas seguintes categorias (note que isso não abrange todos os comandos, só os comuns que serão utilizados nesse curso): DLL, DML, Comandos Select e DCL ANSI SQL Significa American National Standards Institute, uma organização que é responsável por planejar padrões para vários produtos e conceitos. No caso do SQL, isso fornece um esqueleto básico de fundamentos básicos necessários, que como um resultado final, permite consistência entre várias implementações. Com a linguagem SQL podemos nos comunicar com qualquer banco de dados que trabalhe com o sistema (RDBMS), afinal, se tivéssemos uma linguagem para cada banco de dados, ficaria difícil a comunicação e até mesmo a migração desses dados entre bancos de dados. Exemplo, imagine que cada país fosse um banco de dados, logo, cada país tem uma língua nativa, dificultando então a comunicação entre eles, com isso, teríamos que aprender cada língua desses países. Assim como o inglês que é uma língua de comunicação universal, o SQL é a língua universal de comunicação entre banco de dados relacional, tornando mais fácil a comunicação entre os usuários e aplicativos com o banco de dados. Sessões de SQL
  • 2. Pág.: 2 / 86 Apostila de MS SQL Server É uma ocorrência de um usuário que interage com um banco de dados relacional por meio da utilização de comandos de SQL. Comandos válidos de uma sessão SQL podem ser inseridos para consultar o banco de dados, manipular dados e definir estruturas do banco de dados, como tabelas. Quando um usuário conecta-se a um banco de dados, a sessão de SQL é inicializada. Sistemas Gerenciadores de Banco de Dados O acesso a informações em sistemas em sistemas de processamentos de dados que não utiliza Sistemas Gerenciadores de Bancos de Dados (SGBDs), é feito pelo acesso seqüencial a um ou mais arquivos. Cabe ao desenvolvedor criar mecanismo de recuperação da informação. Com a utilização de um SGBD, porém, o acesso fica diferente: pede-se as informações ao gerenciador de banco de dados e elas são devolvidas pelo mesmo. O processo pode ser comparado a uma compra em uma loja de departamento e uma compra em uma loja de autopeças, no primeiro caso o cliente dirige-se a loja e procura por todas as seções, encontra o produto desejado e efetua a compra. Já na segunda o cliente pede o ao balconista o item desejado e este entrega-o.No caso da compra em loja de departamentos o trabalho é toda do cliente, sendo este responsável inclusive pelas especificações necessárias (fazer a escolha certa). Já na loja de auto peças, o balconista assume toda a responsabilidade pela entrega da mercadoria desejada. Arquitetura Cliente-Servidor O SQL Server é um banco de dados relacional, destinado a ser compatível com aplicações que apresentam arquitetura Cliente/Servidor, no qual o banco de dados fica residente em um computador central chamado Servidor e cujas informações são compartilhados por diversos usuários que executam as aplicações em seus computadores locais ou clientes. A arquitetura Cliente/Servidor reduz consideravelmente o tráfego de rede, pois retorna ao usuário apenas os dados solicitados.
  • 3. Apostila de MS SQL Server Pág.: 3 / 86 Arquitetura do SQL Server O Banco de dados SQL Server é dividido em diversos componentes lógicos, como tabelas, índices, visões e outros componentes visíveis para o usuário. Um servidor SQL Server pode conter vários bancos de dados pertencentes a diversos usuários. Cada instância de um SQL Server 2005 possui quatro bancos de dados de sistema (System Databases) chamados master, model, tempdb e msdb. Cada um desses bancos de dados é exigido pelo SQL Server e não pode ser renomeado e nem removido sem antes desativar o SQL Server. Os dois outros bancos de dados que são criados o pubs e northwind, são bancos de dados de usuário e são bancos de dados de exemplo e podem ser removidos sem afetar as operações do SQL Server. Embora ambos os tipos de bancos de dados (Sistema e Usuário) armazenem dados, o SQL Server utiliza os bancos de Sistema para operar e gerenciar o sistema. R Master É o banco de dados principal de configuração do SQL Server. Ele contém informações em todos os bancos de dados que existe no servidor, incluindo os arquivos de banco de dados físico e suas localizações, também contém as definições de configuração e contas de login do SQL Server. Informações contidas no Banco de Dados Master: • • • • • Registro de servidor e logins remotos, Bancos de dados e arquivos de banco de dados locais, Contas de logins, Processos e trancaduras, Definição de configurações de servidor. Com estas informações, é valido dizer que um backup atual do banco de dados master é crucial para qualquer recuperação do servidor.
  • 4. Pág.: 4 / 86 Apostila de MS SQL Server O processo de instalação cria o banco de dados master (master.mdf) e o arquivo de log do banco de dados master (masterlog.ldf) no diretório do C:Arquivos de programasMicrosoft SQL ServerMSSQLData. No caso de um banco de dados master ser corrompido ou destruído e não puder ser restaurado do backup, você poderá reconstruir o banco de dados master no seu estado padrão, a Microsoft fornece um utilitário chamado rebuildm.exe, que esta localizada no subdiretório C: Arquivos de programasMicrosoft SQL Server80ToolsBinn. Após reconstruir o banco de dados master, você terá que fazer manualmente qualquer alteração de configuração e registro de banco de dados e servidor, além de recriar os logins para restaurar o servidor no seu estado anterior. Tempdb O Banco de dados Tempdb é usado para o armazenamento de tabelas temporárias e stored procedures temporários. O banco de dados Tempdb é recriado toda vez que o SQLServer for iniciado, então o Tempdb não poderia ser usado para o armazenamento de dados persistente. As tabelas e as procedures temporárias que são geradas pelo SQL Server são soltas automaticamente quando as conexões são fechadas. Por isso se não houver atividade de conexão, o Tempdb fica vazio, todos os bancos de dados e processos no SQL Server compartilham o Tempdb para gravação de trabalhos. O arquivo de banco de dados Tempdb (tempdb.mdf) e os arquivos de log (templog.ldf) estão no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData. Msdb É um banco de dados do sistema que é utilizado por vários componentes do SQL Server, como o serviço do SQL Server Agent. Além da configuração do SQL Server Agent e das informações sobre a tarefa, a replicação, o envio de log e os dados de plano de manutenção são armazenados no banco de dados Msdb. Informações contidas no banco de dados Msdb: • plano • • Informações sobre o plano de manutenção do banco de dados, como função e histórico do de manutenção. Informações sobre os publicadores e os distribuidores de replicação. Informação sobre a configuração do envio de log e monitoramento. O arquivo de banco de dados msdb (msdb.mdf) e os arquivos de log do Msdb (msdb.ldf) estão localizados no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData. Devido à quantidade de informações sobre configuração armazenadas no Msdb, o backup do banco de dados é recomendado rotineiramente. Se o banco de dados Msdb for corrompido, você poderá reconstruir um Msdb padrão usando um script de construção do SQL Server instalado no processo de instalação. O filename do script de instalação do Msdb é instmsdb.sql e esta localizado no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLInstall. Se o banco de dados Msdb não existir, o script o criará primeiro e, em seguida construirá todos os objetos de banco de dados necessários, depois você poderá ter que reconfigurar todas as funções de programação, planos de manutenção, envio de log e configuração de replicação.
  • 5. Apostila de MS SQL Server Pág.: 5 / 86 Model É um banco de dados template que o SQL Server usa para criar novos bancos de dados. Cada vez que você cria um banco de dados novo no SQL Server, o conteúdo do banco de dados Model é copiado para dentro do novo banco de dados para estabelecer seus objetos padrões, incluindo tabelas, stored procedures e outros objetos de banco de dados. O banco de dados é necessário mesmo que você não pretenda criar nenhum banco de dados de usuário. Cada vez que o SQL Server é iniciado, o banco de dados Tempdb é recriado usando o Banco de dados Model como seu template. Por padrão o banco de dados encontra-se vazio ao ser criado. O arquivo de banco de dados Model (model.mdf) e os arquivos de log do banco de dados Model (modellog.ldf) são criados no diretório C:Arquivos de programasMicrosoft SQL ServerMSSQLData, durante o processo de instalação. Localização dos Bancos de dados Os bancos de dados ficam armazenados em arquivos físicos que recebem o nome de DEVICE. Um device ocupa sempre a quantidade de disco que for a ele destinada, independente da existência ou não de banco de dados em seu interior e independente da taxa de ocupação destes databases. Arquitetura de Armazenamento Físico Os Bancos de dados SQL Server são armazenados em grupos de arquivos que contem dados individuais e arquivos de log, cada banco de dados é feito de arquivos de dados principal e, opcionalmente, de secundários, assim como arquivos de log. Estes arquivos são identificados por suas extensões padrão de arquivos, arquivo de dados principal (*,mdf) e arquivo de log (*.ldf). O arquivo de log e de dados podem ser armazenados em qualquer unidade não comprimida FAT e NTFS. Com exceção dos arquivos de log, os dados no arquivos do SQL Server são gravados em unidades chamadas paginas. Cada Pagina armazena 8k de dados permitindo um Maximo de 8060 bytes em cada pagina (96bytes são usados para cada cabeçalho de pagina). Devido ao limite de dados de pagina de 8060 bytes, o tamanho Maximo de registro também é de 8060 bytes, que inclui todos os tipos de dados, exceto ntext, text e dados de imagem. Text, ntext e dados de imagem são gravados em uma coleção de páginas separadas que permitem até 2GB de informações por item de dados. Um ponteiro para estas paginas de dados é gravado com o registro fonte.
  • 6. Pág.: 6 / 86 Apostila de MS SQL Server Trabalhando com Grupos de Arquivos Com grupos de arquivos é permitido explicitamente a colocação de objetos de banco de dados sobre um conjunto específico de arquivos de banco de dados. Isso pode ser útil para administração assim como para o desempenho, você pode colocar o grupo de arquivos sobre unidades físicas de disco separadas e depois colocar os objetos do banco de dados sobre os arquivos que são membros desse grupo de arquivos. Isso pode melhorar o desempenho por que leituras e gravações no banco de dados executam em unidades físicas de disco separadas ao mesmo tempo. Uma vantagem administrativa é que pode ser feito o backup e restaurar arquivos individuais em um grupo de arquivos. Os grupos de arquivos são criados quando se altera o banco de dados e adiciona-se arquivos a um grupo de arquivos específico. Criando Banco de Dados ( Primeiro Projeto ) CREATE DATABASE Praticando_SQL ON PRIMARY ( NAME = 'Praticando_SQL', FILENAME = 'D:LaerteBDPraticando_SQL.mdf' , SIZE = 10MB , MAXSIZE = 100MB , FILEGROWTH = 5MBKB ) LOG ON ( NAME = 'Praticando SQL_log', FILENAME = 'D:LaerteBDPraticando SQL_log.ldf' , SIZE = 5MB , MAXSIZE = 50MB , FILEGROWTH = 5MB ) Alterando Banco de Dados Para alterar o banco de dados usamos o comando ALTER DATABASE, podemos modificar o nome do banco de dados Praticando_SQL para Praticando_SQL_Server. ALTER DATABASE Praticando_SQL MODIFY NAME = Praticando_SQL_Server Adicionando FileGroup ao Banco de Dados ALTER DATABASE Praticando_SQL_Server ADD FILEGROUP SECUNDARY Adicionando mais Arquivos de Dados ao Banco de Dados
  • 7. Apostila de MS SQL Server Pág.: 7 / 86 ALTER DATABASE Praticando_SQL_Server ADD FILE ( NAME = Praticando_SQL_Server2, FILENAME = 'D:AlunosLaerteBD2Praticando_SQL_Server.ndf', SIZE = 5MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) TO FILEGROUP SECUNDARY Excluindo Arquivos de Dados ao Banco de Dados ALTER DATABASE Praticando_SQL_Server REMOVE FILE Praticando_SQL_Server2 Excluindo FileGroup do Banco de Dados ALTER DATABASE Praticando_SQL_Server REMOVE FILEGROUP SECUNDARY Excluindo o Banco de Dados DROP DATABASE Praticando_SQL_Server
  • 8. Pág.: 8 / 86 Apostila de MS SQL Server Criando o Banco de Dados com Wizard (Segundo Projeto) O caminho mais rápido para Se criar um novo branco do banco de dados Utilizando Microsoft SQL Server Management Studio Express é fazer um clique direito sobre o Databases e em seguida escolher a opção “New Database...” , como mostrado na imagem abaixo. Surgira então a Caixa de Dialgo New Database, que veremos logo a seguir.
  • 9. Apostila de MS SQL Server Pág.: 9 / 86 O primeiro passo do assistente apresenta o quadro a baixo figura - . figura - Caixa de Dialgo New Database Tabela de Definições para Caixa de Dialgo New Database Propriedade Logical Name File Type File Group Initial Size Definição Nome da base de dados. Referenciado em conexões. Tipo de dados armazenado. Dados ou Log de operações. Grupo a que pertence o arquivo, identificado por um endereço físico. Tamanho inicial do arquivo de dados. Apartir de MB. Autogrowth Conforme demosntrado na caixa de dialogo “Change Autogrowth for Banco_Curso”, define parâmetros que determinarão a forma em que os arquivos de dados irão se expandir. Path Endereço (diretório) onde são armazenados os arquivos de dados. File Name Nome do arquivo de dados, com sufixo .MDF para arquivo de dados e .LGF para arquivo de log.
  • 10. Pág.: 10 / 86 Apostila de MS SQL Server Caixa de Dialgo Change Autogrowth Propriedade Enabled Autogrowth File Growth Definição Habilita ou não crescimento automático, baseado em parâmetros. Define crescimento em percentual ou Megabytes. Restinge crescimento da área em Megabytes ou permite crescimento Maximum File Size indeterminado. Tabela de Definições para Caixa de Dialgo Change Autogrowth Vamos Preencher com os valore inseridos conforme a figura – e quando pronto clicar no botão “OK”, ai estara criado o nosso “BD_(Nome do Aluno)_SQL”.
  • 11. Apostila de MS SQL Server Criando Group File’s com Wizard Criando um FileGroup’s 1/2 Criando um FileGroup’s 2/2 Pág.: 11 / 86
  • 12. Pág.: 12 / 86 Apostila de MS SQL Server Adicionando Arquivos (File) de Dados ao Banco de Dados com Wizard
  • 13. Apostila de MS SQL Server Pág.: 13 / 86 Estrutura da Linguagem SQL A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar sobre um banco de dados. Neste curso aprenderemos apenas sobre os dois primeiros subconjuntos, mas é importante que o estudante tenha uma noção geral dos subconjuntos básicos. Tipos de Comandos de SQL Linguagem de definição de dados (DDL, Data Definition Language) É um conjunto de comandos dentro da SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim como criação de índices. Estas instruções SQL permitem definir a estrutura de uma base de dados, incluindo as linhas, colunas, tabelas, índices, e outros metadados. Entre os principais comandos DDL estão CREATE (Criar), DROP (deletar) e ALTER (alterar). Linguagem de manipulação de dados (DML, Data Manipulation Language) é o grupo de comandos dentro da linguagem SQL utilizado para manipular dados dentro de objetos de um banco de dados relacional: recuperação, inclusão, remoção e modificação de informações em bancos de dados. Os principais comandos DML são SELECT (Seleção de Dados), INSERT (Inserção de Dados), UPDATE (Atualização de Dados) e DELETE (Exclusão de Dados). Linguagem de controle de dados (DCL, Data Control Language) é o grupo de comandos que permitem ao administrador de banco de dados controlar o acesso aos dados deste banco. Alguns exemplos de comandos DCL são: • GRANT: Permite dar permissões a um ou mais usuários e determinar as regras para tarefas determinadas; • REVOKE: Revoga permissões dadas por um GRANT. As tarefas básicas que podemos conceder ou barrar permissões são: • CONNECT • SELECT • INSERT • UPDATE • DELETE • USAGE
  • 14. Pág.: 14 / 86 Apostila de MS SQL Server Comandos de Administração de Dados Permitem ao usuário realizar auditorias e realizar análises em operações dentro do banco de dados, são dois comandos gerais de administração de dados: START AUDIT STOP AUDIT Comandos de Controle Transacional Permitem ao usuário gerenciar transações dentro de banco de dados. Comando Commit RollBack Definição Salvar transações dentro do banco de dados. Desfaz transações dentro do banco de dados. SavePoint Cria pontos dentro de grupos de transações até que eles desfaçam as transações com rollback ou salvar com commit. Set Transaction Atribui um nome em uma transação.
  • 15. Apostila de MS SQL Server Pág.: 15 / 86 Procedimentos Armazenados do Sistema Um procedimento armazenado [stored procedure] é uma seqüência de comandos da linguagem Transact-SQL, compilados e armazenados num banco de dados. Os procedimentos armazenados do sistema [system stored procedures] são fornecidos pelo SQL Server, armazenados no banco de dados Máster e automatizam várias tarefas comuns de gerenciamento. Por Exemplo, o procedimento sp_databases mostra quais os nomes de bancos de dados existentes. Exemplos de estored procedures armazenados: • • sp_databases – mostra quais os nomes de bancos de dados existente. sp_helpdb aula – mostra informações sobre o banco de dados aula. Note que todos os procedimentos armazenados do sistema têm nomes que começam com ‘sp_’ (abreviatura de System Procedures). Ao executar um procedimento que inicie com ‘sp_’ o procedimento sera procurado no banco de dados atual, se não for encontrado ele será procurado no banco de dados Máster. Quando um procedimento inicia com ‘xp_’ ele é um procedimento estendido, quer dizer que não foi escrito em SQL, mas foi compilado como parte de uma DLL. Exemplo: xp_cmdshell ‘calc.exe’
  • 16. Pág.: 16 / 86 Apostila de MS SQL Server Tabelas Entidades, Relacionamentos e Atributos Quanto mais organizadas estiverem as informações no Banco de dados, mais forte será a “Conversa” com o Gerenciador de Banco de Dados. Para Isso criou-se um modelo chamado de Modelo de Entidade e Relacionamentos, do qual fazem parte três elementos: Entidades: Uma entidade é um objeto de interesse do qual podem ser colecionadas informações. Ex: Tabelas de clientes, Tabela de pedidos de clientes. Relacionamentos: As entidades podem ser relacionadas entre si pelos relacionamentos. Ex: Entidade de Clientes e Entidade de Pedidos (“clientes fazem pedidos”). Atributos: São as características das entidades. São representadas pelas colunas das tabelas. Ex: nome, endereço, telefone e etc. Componentes de uma Tabela O armazenamento e a manutenção de dados valiosos é a razão para a existência de qualquer banco de dados. Lembre-se de que uma tabela é a forma mais simples de armazenamento de dados em um banco de dados relacional. A seguir os componentes de uma tabela: Campo: É uma coluna em uma tabela que é projetada para manter informações específicas sobre cada registro na tabela. Ex: ID_CLIENTE NOME ENDEREÇO TELEFONE Registro ou Linha de dados: É cada entrada individual que existe em uma tabela. Ex: ID_CLIENTE 20003 20004 NOME João da Silva Marcos Pereira ENDEREÇO R. Conde Pameira R. Paula Frontes TELEFONE 3333-3235 2522-8589 Coluna: É uma entidade vertical em uma tabela que contém todas as informações associadas com um campo específico em uma tabela. Ex: ID_CLIENTE 20003 20004 20005
  • 17. Apostila de MS SQL Server Pág.: 17 / 86 Criando Tabelas Uma tabela [table] é um objeto do banco de dados, composto de zero ou mais linhas [rows], contendo os dados, organizados em uma ou mais colunas [columns]. Para criar a tabela você pode usar o Enterprise Manager ou utilizando comandos SQL DDL (Data Definition Language ) no SQL Query Analyzer. Antes de criar suas tabelas, é importante levar em conta um bom projeto do banco de dados, que determina quais as informações a serem guardadas. Tipos de Dados Cada coluna tem um tipo de dados [data type], que determina que tipo de informações (caracteres, números, datas/horas) podem ser colocadas nas colunas e quais as características desses dados. O tipo de dados é determinado quando a tabela é criada e não pode ser alterado posteriormente. Você pode usar tipo de dados do sistema, predefinidos, ou criar novos tipos de dados, chamados tipo de dados do usuário baseados nos tipos de dados existentes. Os tipos de dados existentes são: Tipo Definição Tamanho Char(n), Caracteres Alpha Numéricos – Posição Fixa Até 4.000 Varchar(n) Caracteres Alpha Numéricos – Posição Não Fixa Até 4.000 Decimal(p,e) Caracteres Numéricos com definiçao de precisão e escala Até (38,38) numeric(p,e) Caracteres Numéricos com definiçao de precisão e escala Até (38,38) BigInt Caracteres Numéricos Inteiros de 8 bytes –2^63 a 2^63-1 Int Caracteres Numéricos Inteiros de 4 bytes –2^17 a 2^17-1 SmallInt Caracteres Numéricos Inteiros de 2 bytes –2^14 a 2^14 -1 TinyInt Caracteres Numéricos Inteiros de 1 byte –2^7 a 2^7 -1 Real Caracteres Numéricos de Ponto Flutuante de 8 bytes 15 digitos Money Caracteres Numéricos de 4 Casas Decimais de 8 bytes –2^63 a 2^63-1 Smallmoney Caracteres Numéricos de 4 Casas Decimais de 4 bytes –2^17 a 2^17-1 Datetime Caracteres de Data e Hora de 4 bytes Smalldatetime Caracteres de Data e Hora de 2 bytes Binary(n) Tipos de Dados Binários de tamanho Fixo de bytes de n. n deve ser um valor de 1 a 8000 January 1, 1753-December 31, 9999 January 1, 1900, through June 6, 2079 Bytes n+4 varbinary(n) Tipos de Dados Binários de tamanho variável de bytes de n. n Comprimento real dos dados deve ser um valor de 1 a 8000 + 4 bytes, não bytes de n Imagem Tipos de Dados Binários de tamanho variável 2^31-1 Text, Caracteres Alpha Numéricos de tamanho variável 2^30-1 Bit Caracteres Numéricos de 1 bit 0-1
  • 18. Pág.: 18 / 86 Apostila de MS SQL Server Criando Tabelas do Projeto de Aula Tabela de Clientes CREATE TABLE Clientes ( ID_Cliente Bigint Nome varchar (50) Cnpj char (25) Tipo char (1) Status Bigint Data datetime Credito money ) NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NULL Criando a Tabela de Produtos CREATE TABLE Produtos ( ID_Produto Bigint Descricao varchar (25) PrecoCompra money Saldo Bigint ) NOT NULL , NOT NULL , NOT NULL , NOT NULL Criando a Tabela de Pedidos no Filegropes Secundary CREATE TABLE Pedidos ( ID_Pedido Bigint ID_Cliente Bigint DataPed datetime ) On SECUNDARY NOT NULL , NOT NULL , NOT NULL
  • 19. Apostila de MS SQL Server Pág.: 19 / 86 Criando a Tabela de Itens no Filegropes Secundary utilizando Wizard Acione com o botão direito do mouse na caixa de dialogo Object Explore, clicando em New Table. Logo em seguida pode ser definido aspectos como nome da tabela, local de armazenamento e a qual esquema pertence. Para tanto, observe a caixa de dialogo Properties. CREATE TABLE Itens ( ID_Pedido Bigint ID_Produto Bigint Quantidade Bigint PrecoVenda money ) On SECUNDARY NOT NULL, NOT NULL, NOT NULL, NOT NULL Área de Trabalho – Create Table Nota 01: Observe a tabela de tipos pagina 17, anteriormente exibida nessa apostila visando conhecer os vários tipos possíveis para cada coluna da tabela. Nota 02: Ao final, ainda não sendo definido o nome da tabela, será solicitado conforme caixa de dialogo
  • 20. Pág.: 20 / 86 Apostila de MS SQL Server Choose Name. Nota 03: Nessa etapa podemo definir a Chave-Primária da tabela, bastando somente definir (selecionar usando a tecla shift) as colunas que irão compor essa chave, e com o botão direito do mouse optar por Set Primary Key. Caixa de Dialogo Choose Name
  • 21. Apostila de MS SQL Server Pág.: 21 / 86 Constraints Chave Primária [Primary Key] A chave primaria [primary key] de uma tabela é uma coluna ou seqüência de colunas que identificam unicamente uma linha dentro da tabela, ou seja, seu valor não pode ser repetido para outras linhas. Ao definir uma chave primária, automaticamente é criado um índice na tabela. Só pode haver uma chave primária na tabela. Na criação da tabela, essa restrição pode ser definida da seguinte forma (quando a chave primária é composta de uma só coluna): Definindo Primary Key (Chave Primária) na criação da tabela CREATE TABLE Clientes2 ( ID_CLIENTE NOME CNPJ TIPO STATUS DATA_CADASTRO HISTORICO CREDITO ) bigint not null identity (1,1) primary key, varchar (50) not null, char (18) not null, char (1) not null, bit not null, datetime not null, Text, money, Obs.: Uma chave primária pode ser acrescentada à tabela depois que ela foi criada com o comando ALTER TABLE. Por exemplo, vamos criar chaves primárias à tabela clientes de duas maneiras distintas: 1ª Maneira: ALTER TABLE Clientes add primary key (id_cliente) 2ª Maneira: ALTER TABLE Clientes add constraint PK_Clientes primary key (id_cliente) Utilizando o Wizard para definir “Primary Key”. No Enterprise Manager, podemos facilmente definir a Primary Key, clicando com o botão direito sobre a
  • 22. Pág.: 22 / 86 Apostila de MS SQL Server tabela e na caixa de dialogo escolher a opção “Desing”, em ai selecionando as linhas (que representam coluna), clicando em seguida com o botão direito do mouse e escolhendo no menu de contexto a opção “Set Primary Key”. Pronto esta setado a coluna “ID_Cliente” como Primary Key!
  • 23. Apostila de MS SQL Server Pág.: 23 / 86 Criando Chave Primária para as Tabelas do Projeto ALTER TABLE ALTER TABLE ALTER TABLE Produtos Pedidos Itens_Pedidos add constraint add constraint add constraint PK_Produtos PK_Pedidos PK_Itens primary key primary key primary key (id_produto) (id_pedido) (Id_Pedido , Id_Produto) Unicidade [Unique] Uma restrição unique em uma coluna ou grupo colunas determina que seu valor deva ser único na tabela. Esse tipo de restrição é usado para chaves alternadas, ou seja, valores que se repetem na tabela além da chave primária. Pode haver várias restrições UNIQUE na tabela e as colunas de uma restrição UNIQUE permitem valores nulos. Repare na sintaxe: ALTER TABLE Clientes ADD UNIQUE (CNPJ) Chave Estrangeira [Foreign Key] Uma forma importante de integridade no banco de dados é a integridade referencial, que é a verificação de integridade feita entre duas tabelas. Por exemplo, a tabela ‘dbo.itens’ será usada para relacionar dados de produtos e pedidos. Ela contém as colunas ID_PRODUTO e ID_PEDIDO. Uma chave estrangeira é uma restrição de integridade referencial. Ela consiste de uma coluna ou grupo de colunas cujo valor deve coincidir com valores de outra tabela. No nosso caso, vamos adicionar duas chaves estrangeiras na tabela ‘dbo.itens’: ID_PEDIDO faz referencia a coluna ID_PEDIDO da tabela dbo.pedidos e ID_PRODUTO que faz referência à coluna ID_PRODUTO da tabela dbo.produtos e uma chave estrangeira na tabela ‘dbo.pedidos’: ID_CLIENTE que faz referencia a coluna ID_CLIENTE da tabela ‘dbo.clientes’, como seguem abaixo: ALTER TABLE FOREIGN KEY pedidos (id_cliente) ADD CONSTRAINT References fk_pedidos_clientes clientes (id_cliente) ALTER TABLE FOREIGN KEY Itens (id_pedido) ADD CONSTRAINT References fk_itens_pedidos pedidos (id_pedido) ALTER TABLE FOREIGN KEY Itens (id_produto) ADD CONSTRAINT References fk_itens_produtos produtos (id_produto) Para excluir uma restrição, é preciso saber o seu nome. Se você não informou o nome na criação, terá que descobri-lo, o que pode ser feito usando-se: sp_help 'dbo.clientes2' Esse comando mostra informações sobre a tabela, inclusive os nomes de cada restrição. Para excluir, usa-se ALTER TABLE, com a opção DROP (independente do tipo de restrição).
  • 24. Pág.: 24 / 86 Apostila de MS SQL Server ALTER TABLE clientes DROP CONSTRAINT nome_da_restrição Uma restrição também pode ser desabilitada temporariamente e depois reabilitada com o comando ALTER TABLE, usando as opções NOCHECK (para desabilitar) e CHECK (para habilitar). Isso não funciona com primary key, unique ou default, apenas com as outras restrições. ALTER TABLE itens NOCHECK CONSTRAINT nome_da_restrição Diagrama entidade relacionamento Diagrama entidade relacionamento é um modelo diagramático que descreve o modelo de dados de um sistema com alto nível de abstração. Ele é a principal representação do Modelo de Entidades e Relacionamentos. É usado para representar o modelo conceitual do negócio. Não confundir com modelo relacional, que representam as tabelas, atributos e relações materializadas no banco de dados. MER: Conjunto de conceitos e elementos de modelagem que o projetista de banco de dados precisa conhecer. O Modelo é de Alto Nível. DER: Resultado do processo de modelagem executado pelo projetista de dados que conhece o MER. [editar]Tipos de relações Os tipos de relações que são utilizadas neste diagrama: Relação 1..1 (lê-se relação um para um) - indica que as tabelas têm relação unívoca entre si. Você escolhe qual tabela vai receber a chave estrangeira; Relação 1..n (lê-se um para muitos) - a chave primária da tabela que tem o lado 1 vai para a tabela do lado N. No lado N ela é chamada de chave estrangeira; Relação n..n (lê-se muitos para muitos) - quando tabelas têm entre si relação n..n, é necessário criar uma nova tabela com as chaves primárias das tabelas envolvidas, ficando assim uma chave composta, ou seja, formada por diversos campos-chave de outras tabelas. A relação então se reduz para uma relação 1..n, sendo que o lado n ficará com a nova tabela criada.
  • 25. Apostila de MS SQL Server Pág.: 25 / 86 Diagrama Diagrama de Entidade e Relacionamento (DER). Através deste diagrama poderemos representar, de forma sucinta e bem estruturada, todos os elementos essenciais abstraídos no processo de análise de sistemas. Denominamos entidade (retângulo) estes elementos. Atribuímos a cada entidade definida atributos pertinentes ao sistema. Desta forma, podemos definir conceitualmente que representaremos como entidades aqueles elementos no qual gostaríamos de armazenar dados – que por sua vez, são representados pelos atributos. Através do relacionamento (losango) representaremos o tipo de relação existente entre as entidades.
  • 26. Pág.: 26 / 86 Apostila de MS SQL Server Criando Chave Estrangeira com Wizard Basta selecionar a coluna desejável, clicando com o botão direito do mouse na opção RelationsShips, clicando em seguida no botão Add. Imediatamente a caixa de dialogo Foreign Key RelationsShips passa apresentar as propriedades conforme ilustrado. Caixa de Dialogo Foreign Key RelationsShips Propriedade Definição Quando assinaldo Yes, verifica a existência de dados que possam Check Existing Data impedir a criação da chave, devido a existência de valores na coluna on Create não válidos. Não válidos aqui refere-se a valores não encontrados previamente na coluna de referência na tabela de referência. Exibe uma Caixa de Dialogo onde é solicitado: Tables and Columns Escolha das colunas que irão compor a chave estrangeira. Escolha da tabela de referência (Foreign Table) e a coluna nessa tabela Especification onde será verificado a existência prévia de valor correspondente quando da inclusão ou auteração de registros. Name Nome da chave estrangeira, normalmente no padrão FK_NomeTabelaOrigem_NomeTabelaDestino Tabela de Definições para Caixa de Dialogo Foreign Key RelationsShips
  • 27. Apostila de MS SQL Server Pág.: 27 / 86 Índices Porque Índices? Índice é um mecanismo que acelera bastante o acesso aos dados. Consiste de uma estrutura de dados que contém ponteiros ordenados para os dados. O SQL Server usa [Indexes ou Índices] automaticamente em varias situações para acelerar a pesquisa e atualização de dados. Por exemplo: • Se uma coluna esta na cláusula WHERE em um comando SELECT, UPDATE ou DELETE, o SQL Server verifica as condições mais rapidamente se houver um índice, caso contrário ele faz uma varredura seqüencial da tabela [table scan]. • Se uma coluna é muito usada para ordenar valores (com ORDER BY), essa ordenação é mais eficiente se ela tiver um índice. • Se uma coluna é usada para fazer junção de duas tabelas, essas junções podem ser feitas mais eficientes se ela estiver indexada. No entanto, índices levam tempo para serem criados e ocupam espaço em disco. Cada atualização na tabela também atualiza dinamicamente todos os índices definidos. Portanto se você criar muitos índices inúteis numa tabela, pode estar atrapalhando o desempenho da atualização de dados sem agilizar muito o tempo de resposta nas consultas. Para criar um Índice usamos o comando CREATE INDEX. Alguns Exemplos do comando “CREATE INDEX”: CREATE INDEX Idx_Clientes_Nome ON Clientes(Nome) CREATE INDEX Idx_ProdutoS_Descricao ON Produtos(Descricao) On SECUNDARY CREATE INDEX Idx_Pedidos_DataPed ON Pedidos(DataPed) On SECUNDARY
  • 28. Pág.: 28 / 86 Apostila de MS SQL Server Criando Índices com Wizard Antes de mas nada vamos excluir o index na Tabela Produtos. Ai sim Clicando sobre o nó Table, em seguida procedendo da mesma maneira com o nó que representa a tabela onde criaremos o índice, selecione e clique em seguida com o botão direito do mouse sobre o nó Index. A caixa de dialogo New Index combinada com a caixa de dialogo Select collumns proverá todo o processo. Ainda, observe nas tabelas de referência dessas ciaxas de dialogos as definições para cada propriedade envolvida. Caixa de dialogo New Index – Aba General
  • 29. Apostila de MS SQL Server Propriedade Index Name Index Type Index Columns Definição Naturalmente o nome do objeto Idx_NomeTabela_NomeCampos Index, no Pág.: 29 / 86 padrão desejável NonClusterd ou Clustered. Nesse caso não, uma vez que somente um índice clusterizado pode existir em uma tabela. Um índice clusterizado ordena fisicamnente uma tabela pela coluna ou colunas indicadas, aasim, como naturalmente a criação da chave primária (indicando a locuna ID_PRODUTO) gerou um índice clusterizado, não há mais possibilidade. Um índice clusterizado é desejável por não necessitar de uma tabela extra para o índice, economizando espaço em mídia e pelo fato de ser mais rápido já que os daados serão ordenados ficamente na tabela. Key A partir do botão Add, podemos escolher as colunas que irão compor o Índice. Caixa de dialogo Selct Colummns
  • 30. Pág.: 30 / 86 Apostila de MS SQL Server Aspectos Importantes na Criação de Índices Base de dados para serém eficientes, necessitam de índices e sobretudo, de bons índices. Algumas características observadas na caixa de dialgo New Index, especificamente na Aba Options concorrem para isso. Veja na tabela sobre definições algumas dessas características. Caixa de Dialogo New Index – Aba Options Propriedade Automatically statistics Definição recompute Mantém estatísiticas úteis na execução de futuros Seclects. Desejável, mas com o inconviniente de gerar dados extas na base. Não provocar lock de registros quando obtenção de daods. A prática de uso de Use row locks when negócios atuais (uso de banco de accessing the index concorrência de dados, sobretudo nos web. sendo utilizado index para lock é raro nos modelos de dados) pois impacta a modelos que atemdem a Armazena resultados na base temporária para recuperação mais Stored intermediate sort rápida imediatamente após sua execução. Isso pode ajuda na result in tempdb performance de uma seleção subsequente. Set fill factor Define o percentual de uso das páginas de índices. O aconselhável é 80%, determinando uma sobra de 20% em cada página de índice. Essa sobra de espaço, prove solução para quando da entrada de um novo registro, que provocaria a divisão da página de índice em duas, acomodando esse valor, que devido ao critério de indexação deveria estar nessa página. Isso retarda mas não evita em definitivo a fragmentação pela divisão de páginas de índices cheias.
  • 31. Apostila de MS SQL Server Pág.: 31 / 86 Linguagem SQL Inserindo Dados ( DML ) Em um banco de dados, inserir dados em uma tabela, significa preencher uma linha de determinada tabela com dados correspondentes aos tipos determinados naquela tabela. Esta inserção de dados deve seguir as regras de integridade da tabela, assim como respeitar as regras de chave primária estabelecidas na tabela. O comando “INSERT” insere linhas em uma tabela. A forma mais simples do comando insert somente uma linha de dados. Nesse caso, são informados os valores de todas as colunas da tabela, na ordem em que elas foram definidas na tabela. Mas é possível inserir dados parciais de apenas algumas colunas, desde que a mesma não estejam definidas como “NOT NULL” . Na linguagem SQL, para inserirmos dados em uma tabela, utilizamos o seguinte comando: INSERT INTO Nome_Tabela VALUES (valor 1, valor2, valor3,...) Obs.: Os valores valor1 , valor2, etc..., seguem a ordem dos campos da tabela, sendo utilizado valor vazio (' ') para campos que não necessitem de preenchimento. Dados de tipo numérico podem ser escritos sem a necessidade de aspas simples. Dados do tipo carácter (como char e varchar), devem ser escritos entre aspas simples. Exemplo: INSERT INTO Clientes VALUES ( 1 , 'MADEIRAS SAMAN' , '0002002/0001' , 'J' , 1 , 2003/6/25 , 1505.00 ) Tabela de Clientes ID_Cliente Nome CNPJ Tipo Status Data Crédito 1 MADEIRAS SAMAN 0002002/0001 J 1 25/06/2003 1.505 2 CAR VEICULOS 10025600/0001 J 1 12/04/2005 1.112 3 CARLOS PEDREIRA 052116852-85 F 1 12/04/2004 500.00 9 FERNADA FERRAZ 011452369-85 F 1 11/02/2002 250.00 10 DANIEL SILVA 014548987-20 F 1 16/03/2001 150.00 11 FRAN ADESIVOS 2005006/0001 J 0 05/04/2005 50.00 12 SAPATOS E CIA. 10060085/0001 J 1 05/05/2003 900.50 13 CALÇADOS VARTA 2002550/0001 J 0 12/07/2001 874.60 21 SALE ADVOGADOS 00010003/0001 J 1 04/06/2004 20.00 22 PAULA MEDEIROS 003254896-84 F 0 01/06/2002 10.00
  • 32. Pág.: 32 / 86 Apostila de MS SQL Server Tabela de Pedidos INSERT INTO Pedidos VALUES (1 , 1 , 10-05-2010) ID_PEDIDO ID_CLIENTE DATAPED 1 1 10/05/2007 2 2 10/05/2007 3 1 25/05/2007 4 3 01/06/2007 5 9 04/06/2007 6 9 27/06/2007 7 10 10/07/2007 8 2 13/07/2007 9 10 15/07/2007 Tabela de Produtos INSERT INTO Nome_Tabela VALUES ( valor 1 , valor2 , valor3 , valor4 ) ID_PRODUTO 1 2 3 5 7 10 11 12 21 22 DESCRIÇÃO CANETA LAPIS BORRACHA PAPEL LISO PAPEL A4 COLA GRAMPO COPO PLASTICO CADERNO FICHAS PRECO_CPOMPRA 0.19 0.10 0.05 5.60 5.80 1.19 1.52 1.06 2.26 2.42 SALDO 20 112 42 23 22 3 52 14 16 120
  • 33. Apostila de MS SQL Server Tabela de Itens INSERT INTO Nome_Tabela VALUES ( valor 1 , valor2 , valor3 , valor4 ) ID_PEDIDO 01 01 02 03 03 03 04 04 04 05 ID_PRODUTO 1 2 2 3 7 1 2 7 1 3 QUANTIDADE 2 16 10 11 8 45 14 9 10 18 PRECO_VENDA 2,50 1,75 1,75 4,00 0,25 2,50 1,75 0,25 2,50 4,00 Pág.: 33 / 86
  • 34. Pág.: 34 / 86 Apostila de MS SQL Server Atualizando Dados Os dados em uma tabela pode ser modificada utilizando o comando UPDATE. O comando update não adiciona novos registros a uma tabela, e nem remove os registros, simplesmente atualiza os dados existentes. A forma mais simples da instrução update é a sua utilização para atualizar uma única coluna em uma tabela. Tanto uma única linha de dados como numerosos registros podem ser atualizados ao atualizar uma única coluna em uma tabela. Synopsis UPDATE [ ONLY ] tabela SET coluna = expressão [, ...] [ FROM lista_de ] [ WHERE condição ] UPDATE WHERE clientes Set tipo = ‘F’ id_cliente = 1 Excluindo Dados O comando delete é utilizado para remover linhas inteiras de dados de uma tabela. O comando delete não é utilizado para remover valores de colunas especificas, um registro completo, incluindo todas as colunas é removido. A instrução delete deve ser usada com cautela, ela funciona muito bem. Para excluir um único registro ou registro selecionados de uma tabela, a instrução delete deve ser utilizada com a seguinte sintaxe: Synopsis DELETE FROM [ ONLY ] tabela [ WHERE condição ] DELETE FROM clientes Where ID_CLIENTE = 22
  • 35. Apostila de MS SQL Server Pág.: 35 / 86 A Sintaxe SELECT O comando SELECT recupera dados de uma ou mais tabelas, é a instrução utilizada para construir consultas no banco de dados. A cláusula FROM é a cláusula obrigatória e sempre deve ser utilizada em conjunção com a instrução SELECT. Há quatro cláusulas, que são partes valiosas de uma instrução SELECT, A sintaxe mais simples para recuperar dados dentro de um banco de dados: • Consulta a dados de uma tabela SELECT FROM WHERE listas_de_colunas listas_de_tabelas condições A lista_de_colunas especifica quais colunas serão retornadas como resultado, separadas por vírgula ou um asterisco (*) que indica todas as colunas da tabela. A cláusula FROM, com uma lista_de_tabelas, especifica quais tabelas serão consultadas. A cláusula WHERE especifica condições que devem ser satisfeitas pelas linhas das tabelas. O comando SELECT pode ser utilizado para mostrar o conteúdo de variáveis, valores literais, etc... Exemplo, execute o comando: SELECT @@version Comandos Select SELECT, o camando que representa a Data Query Language (DQL) em que SQL, é a instrução utilizada para construir consultas no banco de dados. A cláusula FROM é a cláusula obrigatória e sempre deve ser utilizada em conjunção com a instrução SELECT. Há quatro cláusulas, que são partes valiosas de uma instrução SELECT: SELECT FROM WHERE ORDER BY
  • 36. Pág.: 36 / 86 Apostila de MS SQL Server Exemplo 01: SELECT * FROM clientes Exemplo 02: SELECT id_cliente, nome, cnpj, status, tipo FROM clientes Agora adicione uma condição à mesma consulta. SELECT id_cliente, nome, cnpj, status, tipo, data FROM clientes WHERE id_cliente in (2, 3, 9) Operadores Aritméticos Permitidos Os operadores aritméticos desempenham operações matemáticas em duas expressões de um ou mais dos tipos de dados da categoria de tipo de dados numéricos. Operador Significado (Adicionar) Adição - (Subtrair) Subtração * (Multiplicar) Multiplicação / (Dividir) Divisão % (Modulo) Retorna o resto de inteiro de uma divisão. Por exemplo, 12% 5 = 2 porque o resto de 12 dividido por 5 é 2.
  • 37. Apostila de MS SQL Server Pág.: 37 / 86 Funções de agregação Realizam cálculos em um conjunto de valores e retornam um único valor. Com exceção da função COUNT, as funções de agregação ignoram valores nulos. COUNT A função COUNT é utilizada para contar linhas ou valores de uma coluna que não tem valor null. A função COUNT quando utilizada com uma consulta retorna valor numérico. SELECT COUNT (*) FROM CLIENTES SUM É utilizada para retornar um total nos valores de uma coluna para um grupo de linhas. SELECT SUM (CREDITO) FROM CLIENTES MAX A função MAX é utilizada para retornar o valor máximo para valores de uma coluna em um grupo de linhas. SELECT MAX (CREDITO) FROM CLIENTES MIN A função MIN retorna o valor mínimo de uma coluna para um grupo de linhas. SELECT MIN (CREDITO) FROM CLIENTES AVG A função AVG retorna o valor médio não ponderado de uma coluna para um grupo de linhas. SELECT AVG (CREDITO) FROM CLIENTES
  • 38. Pág.: 38 / 86 Apostila de MS SQL Server Duas Formas Possíveis de Select Com ALIAS (Significa segundo nome, ou apelido.) SELECT Cl.nome, Cl.credito, Pe.DataPed, Sum(It.Quantidade * It.Preco_Venda) As Total FROM Clientes Cl, Pedidos Pe, Itens It WHERE Cl.id_cliente = Pe.id_cliente AND Pe.id_pedido = It.id_pedido GROUP BY Cl.nome, Cl.credito, Pe.DataPed Ou Sem ALIAS SELECT Clientes.nome, Clientes.credito, Pedidos.DataPed, Sum(Itens.Quantidade * Itens.Preco_Venda) As Total FROM Clientes, Pedidos, Itens WHERE Itens.id_pedido Clientes.id_cliente = Pedidos.id_cliente GROUP BY Clientes.nome, Clientes.credito, Pedidos.DataPed AND Pedidos.id_pedido =
  • 39. Apostila de MS SQL Server Pág.: 39 / 86 Operadores Lógicos São aqueles operadores que utilizam palavras-chave de SQL para fazer comparações em vez de símbolos. Os operadores lógicos abordados são: IS NULL Utilizado para comparar um valor com um valor null. No exemplo, o campo crédito não tem valor. SELECT * FROM CLIENTES WHERE CREDITO IS NULL BETWEEN É utilizado para procurar valores que estão dentro de um conjunto de valores, dado o valor mínimo e o valor máximo. No exemplo, o campo valor deve estar entre 20 e 50. SELECT * FROM CLIENTES WHERE credito BETWEEN 20 AND 50 IN É utilizado para comparar um valor com uma lista de valores literais que foi especificada. No exemplo, o campo crédito deveria ser um dos valores da lista. SELECT * FROM CLIENTES WHERE CREDITO IN (20, 30, 50) LIKE É utilizado para comparar um valor com valores semelhantes utilizando operadores curinga (%) porcentagem ou (_) sublinhado. -Exemplolo: Localiza quaisquer valores que comecem com PAB SELECT * FROM CLIENTES WHERE nome LIKE 'PAB%' -Exemplo: Localiza quaisquer valores que contenham ABL a partir da segunda casa e terminem com quaisquer valores. SELECT * FROM CLIENTES WHERE nome LIKE 'ABL%' EXISTS É utilizado para procurar a presença de uma linha em uma tabela específica que atenda a certos
  • 40. Pág.: 40 / 86 Apostila de MS SQL Server critérios. Veja como pesquisar para ver se id_cliente 982 está na tabela clientes. SELECT * FROM CLIENTES WHERE EXISTS ( Select id_cliente From clientes Where id_cliente = 982) NOT EXISTS É utilizado para procurar a não ocorrência de uma linha em uma tabela específica que atenda a certos critérios. Veja como pesquisar para ver se existe clientes que não compraram. Logo não ocorrem na tabela pedidos. SELECT * FROM CLIENTES WHERE NOT EXISTS ( Select id_cliente From Pedidos WHERE Pedidos.id_cliente = Clientes.id_Cliente )
  • 41. Apostila de MS SQL Server Pág.: 41 / 86 C o n c eito s b á si c o s de jun ç õe s Usando junções, é possível recuperar dados de duas ou mais tabelas com base em relações lógicas entre as tabelas. Junções indicam como Microsoft S QL Server deveriam usar dados de uma tabela para selecionar as linhas em outra tabela. Uma condição de junção define o modo como duas tabelas são relacionadas em uma consulta por: • E specificando a coluna de cada tabela a ser usada para a junção. Uma condição de junção típica especifica uma chave estrangeira de uma tabela e sua chave associada na outra tabela. • E specificando um operador lógico (por exemplo, = ou <>) a ser usado na comparação de valores das colunas. Para esse exemplo vamos adicionar uma nova tabela em nosso banco: CREATE TABLE Cidades ( ID_Cidade int CidadeNome Estado ) NOT NULL PRIMARY KEY, varchar (50) NOT NULL, char (2) NOT NULL ALTER TABLE CLIENTES Add Id_Cidade char (2) NOT NULL INNER JOINS Um INNER JOIN conecta duas ou mais tabelas segundo uma condição de junção. O INNER JOIN retorna os registros que forem encontrados nas tabelas e respeitarem as condições de busca. SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Clientes INNER JOIN Cidades ON Clientes.ID_Cidade = Cidades.ID_Cidade OUTER JOINS Como podemos reparar no INNER JOIN, somente as linhas que possuem dados nas duas colunas do relacionamento são retornadas. Caso uma das colunas não possua valor (tenha null), este registro não participará da junção do SELECT. Isto pode não uma determinada pergunta. Você pode estar querendo saber, por exemplo, quais os clientes que você tem cadastrado, e, se houver a informação, o nome da cidade destes. LEFT OUTER JOINS Neste caso, você precisa de um OUTER JOIN. Um OUTER JOIN traz todas as linhas de uma determinada tabela, tendo ou não relacionamento completo, e as linhas da segunda tabela que satisfizerem o relacionamento. Vamos construir o exemplo dito antes: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Clientes LEFT OUTER JOIN Cidades ON Clientes.ID_Cidade = Cidades.ID_Cidade;
  • 42. Pág.: 42 / 86 Nome Cliente1 Cliente2 Cliente3 Cliente4 Apostila de MS SQL Server CidadeNome Estado Rio de Janeiro São Paulo NULL São Paulo RJ SP NULL MG RIGHT OUTER JOINS Se quiséssemos trazer todas as cidades, e os clientes que existirem nelas, faríamos: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Clientes RIGHT OUTER JOIN Cidades ON Clientes.ID_Cidade = Cidades.ID_Cidade Nome Cliente1 Cliente2 Cliente4 NULL CidadeNome Rio de Janeiro São Paulo São Paulo Vitória Estado RJ SP MG ES Que esteja bem claro que a palavra LEFT ou RIGHT refere-se apenas à ordem escrita das tabelas, vamos ver um outro exemplo de trazer todos os clientes e as cidades destes: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Cidades RIGHT OUTER JOIN Clientes ON Clientes.ID_Cidade = Cidades.ID_Cidade Nome Cliente1 Cliente2 Cliente3 Cliente4 CidadeNome Rio de Janeiro São Paulo NULL São Paulo Estado RJ SP NULL MG FULL OUTER JOINS E podemos, ainda, juntar os dois modos: ou seja, fazer um LEFT e RIGHT OUTER JOIN ao mesmo tempo. Isto, na, verdade, se chama FULL OUTER JOIN. E o exemplo está a seguir: SELECT Clientes.Nome, Cidades.CidadeNome, Cidades.Estado FROM Cidades FULL OUTER JOIN Clientes ON Clientes.ID_Cidade = Cidades.ID_Cidade; Nome Cliente1 Cliente2 Cliente4 NULL Cliente3 CidadeNome Rio de Janeiro São Paulo São Paulo Vitória NULL Estado RJ SP MG ES NULL
  • 43. Apostila de MS SQL Server Pág.: 43 / 86 Views Uma visão (View) é uma forma alternativa de olhar os dados contidos em uma ou mais tabelas. Para definir uma visão, usa-se um comando SELECT que faz uma consulta sobre as tabelas. A visão aparece depois como se fosse uma tabela. Visões têm as seguintes vantagens: • Uma visão pode restringir quais as colunas da tabela podem ser acessadas (para leitura ou modificação), o que é útil no caso de controle de acesso, • Uma consulta SELECT que é usado muito frequentemente pode ser criada como visão. Com isso, a cada vez que ela é necessária, basta selecionar dados da visão, • Visões podem conter valores calculados ou valores de resumo, o que simplifica a operação, • Uma visão pode usada para exportar dados para outras aplicações. Criando uma visão Vamos criar uma visão no banco de dados Aluno, usando a tabela Clientes. Essa visão vai mostrar o código, nome e histórico de clientes de pessoas jurídicas. Para criar uma visão use o comando CREATE VIEW. CREATE VIEW AS SELECT VIEWClientes Clientes.ID_Cliente, Clientes.Nome, Clientes.Historico FROM Clientes WHERE (Tipo = 'J') CREATE VIEW VIEWcase AS SELECT Clientes.Nome, Clientes.Credito, 'Avaliação'= Case When Credito Between 0 and 100 then 'Regular' When Credito Between 101 and 200 then 'Bom' Else 'Ótimo' End FROM Clientes
  • 44. Pág.: 44 / 86 CREATE VIEW AS SELECT Apostila de MS SQL Server VIEWCube Produtos.Descricao, Pedidos.Dataped, (Itens.Quantidade) as Quantidade SUM FROM Pedidos INNER JOIN ITENS ON Pedidos.ID_Pedido = Itens.ID_Pedido INNER JOIN PRODUTOS ON Itens.ID_Produto = Produtos.ID_Produto GROUP BY Produtos.Descricao, Pedidos.Dataped WITH Cube Obs: O operador CUBE é utilizado junto com a cláusula Group By para produzir linhas adicionais de resumo. Ele produzirá linhas superagregadas utilizando cada possível combinação das colunas na cláusula Group By, produzirá médias parciais e somas parciais mas também colunas de referência cruzada para retornar linhas adicionais de resumo. CREATE VIEW AS SELECT SUM VIEWROLLUP Produtos.Descricao, Pedidos.Dataped, (Itens.Quantidade) as Quantidade FROM Pedidos INNER JOIN ITENS ON Pedidos.ID_Pedido = Itens.ID_Pedido INNER JOIN PRODUTOS ON Itens.ID_Produto = Produtos.ID_Produto GROUP BY WITH Produtos.Descricao, Pedidos.Dataped ROLLUP Obs: Assim como o operador Cube, o RollUp funciona em conjunto com a cláusula Group By, geralmente utilizado para produzir médias em execução ou somas em execução aplicando a função agregada para cada coluna que consta na cláusula Group By.
  • 45. Apostila de MS SQL Server Pág.: 45 / 86 Stored Procedure Um procedimento armazenado [stored procedure] é um conjunto de comandos SQL que são compilados e armazenados no servidor. Ele pode ser chamado a partir de um comando SQL qualquer. A vantagem de usar procedimentos armazenados é que eles podem encapsular rotinas de uso freqüente no próprio servidor, e estarão disponíveis para todas as aplicações. Parte da lógica do sistema pode ser armazenada no próprio banco de dados, em vez de ser codificada várias vezes em cada aplicação. Eles também aumentam o desempenho de várias operações, pois são executados no servidor e pré-compilados, ao contrário de comandos SQL que devem ser interpretados no momento da execução. Para criar um procedimento, use o comando CREATE PROCEDURE. Exemplo o procedimento abaixo recebe um parâmetro (@nome) e mostra todos os clientes cujo nome contenha o nome informado: CREATE PROCEDURE ProcIncCliente ( @ID_Cliente Int, @Nome Varchar(50), @Cnpj Char(14), @Tipo Char(1), @Status Bit, @Data DateTime, @Historico Text, @Foto Image, @Credito Money) AS BEGIN INSERT Into Clientes(ID_Cliente , Nome, Cnpj, Tipo, Status, Data, Historico, Foto, Credito) Values(@ID_Cliente, @Nome, @Cnpj, @Tipo, @Status, @Data, @Historico, @Foto ,@Credito) ) END
  • 46. Pág.: 46 / 86 Apostila de MS SQL Server CREATE PROCEDURE ProcIAltCliente ( @ID_Cliente Int, @Nome Varchar(50), @Cnpj Char(14), @Tipo Char(1), @Status Bit, @Data DateTime, @Historico Text, @Foto Image, @Credito Money ) AS BEGIN Begin Transaction Update Where Clientes Set Clientes.Nome Clientes.Cnpj Clientes.Tipo Clientes.Status Clientes.Data Clientes.Historico Clientes.Foto Clientes.Credito = = = = = = = Clientes.ID_Cliente = If @@Error = 0 Begin Commit Transaction Return (0) End Else Begin Rollback Transaction Return (1) End END @Nome, @Cnpj, @Tipo, = @Status, @Data, @Historico, @Foto, @Credito @ID_Cliente
  • 47. Apostila de MS SQL Server Pág.: 47 / 86 CREATE PROCEDURE ProcExcCliente(@ID_Cliente Bigint) As Declare @Msg Varchar (255), @Erro Bigint BEGIN Delete From Where Clientes Clientes.ID_Cliente = @ID_Cliente set @Erro = @@Error If @Erro <> 0 BEGIN Select erro: ' @Msg = 'Operação Não Realizada devido ao seguinte + Convert (Varchar (255), @Erro) Raiserror (@Msg, 10, 1) END END CREATE PROCEDURE ProcVendaProduto ( @DataIni DateTime, @DataFim DateTime, @Valor Money) As BEGIN Select From Produtos INNER JOIN Itens On Produtos.ID_Produto = Itens.ID_Produto INNER JOIN Pedidos On Pedidos.ID_Pedido = Itens.ID_Pedido Where Group By Having Order By END Produtos.Descricao, Sum(Itens.Quantidade * Itens.Precovenda) As Total Pedidos.DataPed BetWeen @DataIni And @DataFim Produtos.Descricao Sum(Itens.Quantidade * Itens.Precovenda) > @Valor Produtos.Descricao
  • 48. Pág.: 48 / 86 Apostila de MS SQL Server CREATE PROCEDURE ProcVendasMesAno ( @DataIni DateTime, @DataFim DateTime ) AS BEGIN Select Convert(Varchar(15), Datepart(mm,Pedidos.Dataped)) + '-' + Convert(Varchar(15),Datepart(yy,Pedidos.Dataped))AS 'Ano_Mes', Sum(Itens.Quantidade * Itens.Precovenda) AS Total From Itens INNER JOIN Pedidos On Itens.ID_Pedido = Pedidos.ID_Pedido Where Pedidos.Dataped Between @Dataini And @DataFim Group By Convert(Varchar(15),Datepart(Mm,Pedidos.Dataped))+ '-' + Convert(Varchar(15),Datepart(Yy,Pedidos.Dataped)) Order By Convert(Varchar(15),Datepart(Mm,Pedidos.Dataped))+ '-' + Convert(Varchar(15),Datepart(Yy,Pedidos.Dataped)) END CREATE PROCEDURE ProcCursor AS Declare cursorX Cursor for Select Produtos.* From Produtos Declare @ID_Produto Bigint, @descricao varchar(25), @precocompra money, @saldo Bigint BEGIN open cursorx Create Table #tempProduto ( ID_Produto Bigint, Descricao varchar(25), PrecoCompra money, Saldo Bigint ) fetch cursorx into @ID_Produto, @descricao, @precocompra, @saldo while (@@fetch_status = 0) begin if @saldo > 1 begin Insert Into #tempProduto values( @ID_Produto, @descricao, @precocompra, @saldo) end fetch cursorx into @ID_Produto, @descricao, @precocompra, @saldo end close cursorx Deallocate cursorx select * from #tempProduto end
  • 49. Apostila de MS SQL Server Pág.: 49 / 86 CREATE PROCEDURE ProcCursorTabTemp AS Declare cursorX Cursor for Select Clientes.Nome, Sum(Itens.Quantidade * Itens.PrecoVenda) as Total From Clientes INNER JOIN Pedidos On Pedidos.ID_Cliente = Clientes.ID_Cliente INNER JOIN Itens On Itens.ID_Pedido = Pedidos.ID_Pedido Group By Clientes.Nome Declare @nome varchar(35), @total Money BEGIN open cursorx Create money) Table #tempPedidosCliente(Nome varchar(35), Total fetch cursorx into @nome, @total While (@@fetch_status = 0) begin if @total > 1 begin Insert Into #tempPedidosCliente Values(@nome, @total) end fetch cursorx into @nome, @total end close cursorx Deallocate cursorx Select * From #tempPedidosCliente END
  • 50. Pág.: 50 / 86 Apostila de MS SQL Server Triggers Um gatilho [trigger] é um tipo de procedimento armazenado, que é executado automaticamente quando ocorre algum tipo de alteração numa tabela. Gatilhos “disparam” quando ocorre uma operação INSERT, UPDATE e DELETE numa tabela. Geralmente gatilhos são utilizados para reforçar restrições de integridade que não podem ser tratadas pelos recursos mais simples, como regras, restrições, a opção NOT NULL etc. Um gatilho também pode ser usado para calcular e armazenar valores automaticamente em outra tabela. Vamos criar um gatilho, chamado ValidaCredito, que será ativado por uma operação INSERT na tabela dbo.clientes. CREATE TRIGGER ValidaCredito ON Clientes FOR Insert AS Declare @ValorCredito money, @IDCliente int BEGIN Select @ValorCredito = Inserted.Credito, @IDCliente = Inserted.ID_Cliente From Inserted If @ValorCredito > 10000 Update Clientes set Clientes.Credito = 10000 Where Clientes.ID_Cliente = @IDCliente END CREATE TRIGGER AtualizaSaldoInc ON Itens FOR INSERT AS DECLARE @QTD INT, @COD INT, @SALDO INT, @NRO INT, @Descricao varchar(255), @msg varchar(255) BEGIN SELECT @QTD = INSERTED.QUANTIDADE, @COD = INSERTED.ID_PRODUTO, @NRO = INSERTED.ID_PEDIDO FROM INSERTED SELECT @SALDO = PRODUTOS.SALDO, @DESCRICAO = PRODUTOS.DESCRICAO FROM PRODUTOS WHERE PRODUTOS.ID_PRODUTO = @COD IF @SALDO >= @QTD UPDATE PRODUTOS SET PRODUTOS.SALDO = PRODUTOS.SALDO - @QTD WHERE PRODUTOS.ID_PRODUTO = @COD ELSE BEGIN SELECT @MSG = 'INI Não aceito, pois saldo do produto ' + @descricao + ' é: ' + Convert (Varchar(255), @saldo) + ' não atendendo a necessidade. FIM' Raiserror (@msg, 14, 1) Rollback END END
  • 51. Apostila de MS SQL Server Pág.: 51 / 86 CREATE TRIGGER AtualizaSaldoExc ON Itens FOR DELETE AS DECLARE @Qtd INT, @Cod INT BEGIN SELECT @Qtd = Deleted.Quantidade, @Cod = Deleted.ID_Produto FROM DELETED UPDATE Produtos SET Saldo = Saldo + @Qtd WHERE ID_PRODUTO = @Cod END CREATE TRIGGER AtualizaSaldoAlt ON ITENS FOR UPDATE DECLARE @QTDNovo INT, @CODNovo INT, @QTDAnterior INT, @CODAnterior INT, @SALDO INT, @Descricao varchar(25), @Msg varchar(255) BEGIN SELECT @QTDNovo = INSERTED.QUANTIDADE, @CODNovo = INSERTED.ID_PRODUTO FROM INSERTED SELECT FROM UPDATE WHERE SELECT FROM WHERE IF UPDATE AS @QTDAnterior = DELETED.QUANTIDADE, @CODAnterior = DELETED.ID_PRODUTO DELETED PRODUTOS SET PRODUTOS.SALDO PRODUTOS.ID_PRODUTO = PRODUTOS.SALDO + @QTDAnterior = @CODAnterior @SALDO = PRODUTOS.SALDO, @DESCRICAO=PRODUTOS.DESCRICAO PRODUTOS PRODUTOS.ID_PRODUTO = @CODNovo @SALDO >= @QTDNovo PRODUTOS SET PRODUTOS.SALDO = PRODUTOS.SALDO - @QTDNovo PRODUTOS.ID_PRODUTO = @CODNovo WHERE ELSE BEGIN SELECT @MSG = 'INI Não aceito, pois saldo do produto ' + @Descricao + ' é: ' + Convert (Varchar(255), @saldo) + ' não atendendo a necessidade. FIM' Raiserror (@Msg, 14, 1) Rollback END END
  • 52. Pág.: 52 / 86 Apostila de MS SQL Server Controle de Transação Controlando Transação Simples Begin Begin Transaction Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 1200, 12.78) Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 400, 23.78) If @@Error = 0 Begin Print 'Registro inserido com sucesso.' Commit Transaction End Else Begin Print 'Registro não incluído.' Rollback Transaction End End Saldo, Saldo, Controlando Transações com Savepoints (Circunstancial) Begin Begin Tran Save Tran Trans1 Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 1200, 12.78) If @@Error <> 0 Begin Print 'Produto não incluído.' Rollback Tran Trans1 End Save Tran Trans2 Insert Into Produtos(Id_produto, Descricao, PrecoCompra) Values(Id_produto 'Novo Produto', 1200, 12.78) If @@Error <> 0 Begin Print 'Produto não incluído.' Rollback Tran Trans2 End Commit Tran End Outros Objetos Saldo, Saldo,
  • 53. Apostila de MS SQL Server Pág.: 53 / 86 CREATE DEFAULT (Transact-SQL) Cria um objeto chamado padrão. Quando associado a uma coluna ou um tipo de dados de alias, um padrão especifica um valor a ser inserido na coluna á qual o objeto está associado (ou em todas as colunas, no caso de um tipo de dados de alias), quando nenhum valor é fornecido explicitamente durante uma inserção. I m p ort ante Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez dela, use definições padrão criadas com a palavra-chave DEFAULT de ALTER TABLE ou CREATE TABLE. CREATE DEFAULT DefautGetData as GetData() CREATE DEFAULT DefautISigla as 'RJ' CREATE Rule (Transact-SQL) Cria um objeto chamado regra. Quando associada a uma coluna ou a um tipo de dados de alias, a regra especifica os valores aceitáveis que podem ser inseridos naquela coluna. CREATE RULE Sigla CREATE RULE Sigla2 CREATE RULE Faixa as @Valor as @Valor as @Valor = in >= 1 'RJ' / 'ES' / 'MG' ('RJ', 'ES', 'MG' ) and @Valor <= 1000 I m p ort ante Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Recomenda-se o uso de restrições de verificação. As restrições de verificação são criadas pelo uso da palavra-chave CHECK de CREATE TABLE ou ALTER TABLE.
  • 54. Pág.: 54 / 86 Apostila de MS SQL Server Criando Login No SQL SERVER Login é um conjunto de caracteres composto de LoginName, password database default, default language e UserName solicitado para os usuários que por algum motivo necessitam acessar algum sistema de banco de dados. Geralmente os sistemas computacionais solicitam um login e uma senha para a liberação do acesso. Para adicionar um usuário ao banco de dados do SQL Server você tem que seguir três passos: Primeiro: você deve criar um login, que é um "cara" que tem permisssão de se logar no SQL Sever CREATE LOGIN ALUNO_NOME WITH PASSWORD = '123'; Segundo: você deve criar um usuário para o banco de dados que deseja mapeando esse usuário para o login criado, assim seu usuário conseguirá se logar no SQL Server e entrar no banco de dados desejado. CREATE USER ALUNO_NOME FROM LOGIN ALUNO_NOME; Terceiro: você deve dar ou remover permissões ao usuário porque até o segundo passo o usuário criado só tem direito a entrar no banco de dados, dando as permissões o usuário já pode operar no banco de dados. Se o usuário for comum você pode adicioná-lo apenas as roles de db_reader e db_writer, que permitirá que o usuário faça select, insert, delete e update em todas as tabelas do referido banco de dados. EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'ALUNO_NOME' EXEC SP_ADDROLEMEMBER 'DB_DATAWRITER', 'ALUNO_NOME' Obs.: Se quiser ver melhor isso na parte gráfica, pode consultar dentro do "Object Explorer" a guia "Security", dentro dela clique em "Login", botão direito em "sa", "Properties", escolha a guia "User Mapping". Aqui você verá as roles do SQL Server pra cada usuário. Caso queira saber o que dá direito a cada role procure no SQL Server Books Online.
  • 55. Apostila de MS SQL Server Pág.: 55 / 86 Usando comandos DDL CREATE LOGIN WITH PASSWORD DEFAULT_DATABASE DEFAULT_LANGUAGE = = = Digidata_Login '123', digidata, Português Usando system procedure SP_AddLogin 'Digidata_Login',' 123','digidata' Como criar um logon do SQL ServerSQL Server 2008 R2 Outras versões SQL Server 2008 A maioria os usuários do Windows precisa de um logon SQL Server para se conectar a SQL Server. Este tópico mostra como criar um logon do SQL Server. Para criar um logon do SQL Server que usa Autenticação do SQL Server (SQL Server Management Studio) 1.No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta da instância de servidor onde criar o novo logon. 2.Clique com o botão direito na pasta “Security” (Segurança), aponte para “New” (Novo) e clique em “Login” (Logon). 3.Na página “Geral”, insira o nome de um usuário do Windows na caixa Nome de logon . 4.Selecione “SQL Server authentication”, Obs.: determine o Banco a onde será criado e a Linguagem. 5.Insira uma senha para o logon. 6.Selecione as opções de diretiva de senha que devem ser aplicadas ao novo logon. Em geral, a diretiva de imposição de senha é a opção mais segura. 7.Clique em “OK”.
  • 56. Pág.: 56 / 86 Apostila de MS SQL Server Criando Login com Wizard Escolha do nome de Login, senha, banco de dados padrão e linguagem
  • 57. Apostila de MS SQL Server Escolha do BD default, UserName e Papeis de Sistema Criando Usuário Usando comandos DDL CREATE USER Digidata_User FOR LOGIN Digidata_Login Usando system procedure SP_AddUser ' Digidata_Login',' Digidata_User' Pág.: 57 / 86
  • 58. Pág.: 58 / 86 Apostila de MS SQL Server Como criar um usuário de banco de dados SQL Server Este tópico mostra como criar um usuário de banco de dados mapeado para um logon do SQL Server. Assume-se que já exista um logon correspondente do SQL Server. Criar um usuário de banco de dados usando o SQL Server Management Studio 1.No SQL Server Management Studio, abra o Pesquisador de Objetos e expanda a pasta Bancos de Dados. 2.Expanda o banco de dados no qual o novo usuário de banco de dados será criado. 3.Clique com o botão direito do mouse na pasta “ Security” Segurança, aponte para “new” Novo e clique em “User” Usuário. 4.Na página Geral, insira um nome para o novo usuário na caixa Nome de Usuário. 5.Na caixa Nome de Logon, digite o nome de um logon do SQL Server para mapear para o usuário de banco de dados. 6.Clique em OK. Obs.: Para Criar um usuário de banco de dados certifique que esteja conectado ao mesmo.
  • 59. Apostila de MS SQL Server Criando Usuário com Wizard Escolha do Login, Nome do Usuário Pág.: 59 / 86
  • 60. Pág.: 60 / 86 Apostila de MS SQL Server Escolha dos Objetos de BD e permissões Concedendo Permissões aos Usuários Para conceder ou revogar permissões a um usuário, é mais fácil usar: GRANT ALL TO Digidata_User REVOKE ALL FROM Digidata_User GRANT create table TO Digidata_User REVOKE create table FROM Digidata_User GRANT select ON clientes TO Digidata_User REVOKE select ON clientes TO Digidata_User
  • 61. Apostila de MS SQL Server Pág.: 61 / 86 Criando Role (Funções) As funções são protegíveis no nível de banco de dados. Depois de criar uma função, configure as permissões no nível de banco de dados da função usando GRANT, DENY e REVOKE. Para adicionar membros a uma função de banco de dados, use o procedimento armazenado sp_addrolemember. Usando comandos DDL CREATE ROLE Digidata_Role AUTHORIZATION Digidata_User Usando system procedure SP_Addrole Digidata_Role Adicionando o User a Role EXEC SP_Addrolemember Digidata_Role, Digidata_User Adicionando privilégios a Role GRANT SELECT ON Clientes TO Digidata_Role GRANT CREATE TABLE TO Digidata_Role DENY CREATE TABLE TO Digidata_Role
  • 62. Pág.: 62 / 86 Apostila de MS SQL Server Criando Role com Wizard Escolha do RoleName, Selecionando os objetos e permissões 1/3
  • 63. Apostila de MS SQL Server Selecionando os objetos e permissões 2/3 Selecionando os objetos e permissões 3/3 Pág.: 63 / 86
  • 64. Pág.: 64 / 86 Apostila de MS SQL Server
  • 65. Apostila de MS SQL Server Pág.: 65 / 86 Criando BackUp e Restore Fazer um backup consiste em copiar o banco de dados para um local seguro. Uma cópia de backup deve ser feita na medida do possível em outra máquina da rede, para uma fita magnética ou outro meio magnético. O backup copia tudo o que esta dentro do banco de dados, incluindo o log de transação. O log de transação é um registro serial de todas as modificações feitas no banco de dados. Esse log é usado no processo de restauração para fazer todas as alterações que ocorrem no banco de dados desde o ultimo backup. A restauração do banco de dados, quando bem sucedida, retorna o banco ao estado em que estava no momento da execução do backup. Se durante a execução de backup alguam transação não tiver sido concluída,ela será desfeita para garantir a consistência da base de dados. O SQL Server 2005 permite a confecção de dois tipos de backup: o backup completo e o diferencial. O backup completo, como o nome diz, é uma fotografia exata de todo o banco de dados. O backup diferencial é uma cópia das alterações feitas no banco de dados, desde a realização do ultimo backup completo.
  • 66. Pág.: 66 / 86 Apostila de MS SQL Server Criando backup completo Criando backup diferencial
  • 67. Apostila de MS SQL Server Efetuando o Restore full e diferencial Efetuando um Restore pontual Pág.: 67 / 86
  • 68. Pág.: 68 / 86 Apostila de MS SQL Server Anexo - 1 Registrar Servidores Arquitetura Distribuída do SQL Server O SQL Server utiliza uma arquitetura na qual vários servidores distribuídos podem ser acessados a partir de um único servidor. Para que isto seja possível, estes servidores devem ser configurados como Linked Servers. Para executarmos esta atividade, você deve criar na sua máquina um linked server apontando para o a máquina de um colega (sugestão: caso queira executar a atividade em uma mesma máquina, faça uma segunda instalação do SQL Server, dando à nova instância que será criada um nome diferente do padrão 'SQLEXPRESS'). A configuração de um Linked Server pode ser feita usando a stored procedure sp_addlinkedserver ou através do SQL Server Management Studio Express, selecionando a opção de menu 'New Linked Server':
  • 69. Apostila de MS SQL Server Pág.: 69 / 86 A janela de diálogo 'New Linked Server' será exibida. Na página 'General' defina o nome e o tipo do servidor. Na página 'Security' defina mapeamentos de usuários entre os servidores local e remoto, caso necessário; e defina como proceder para logins que não foram mapeados (sugestão: use a opção 'Be made using the login´s current security context').
  • 70. Pág.: 70 / 86 Apostila de MS SQL Server Para acessar dados no servidor remoto, devemos referenciar o nome do servidor, o banco de dados, o esquema e o nome da tabela. Uma seleção na relação 'Rel' do banco de dados 'BD' do servidor 'SERVER SQLEXPRESS' teria a seguinte sintaxe em SQL: select * from [NomeServidorSQLEXPRESS].NomeBanco.Esquema.NomeTabela -Como exemplo poderíamos considerar: select * from [Servidor01SQLEXPRESS].BancoCurso.dbo.Clientes
  • 71. Apostila de MS SQL Server Pág.: 71 / 86 Anexo – 2 Conhecendo o SQL Server 2005 Express Edition Antes de mais nada, vamos esclarecer uma coisa. O SQL Server 2005 Express Edition (SQL Server Express) não é o SQL Server 2005 propriamente dito. O SQL Server Express é uma plataforma de banco de dados baseada nas tecnologias do SQL Server 2005 e chega para substituir o MSDE 2000. Ele é um produto gratuito e possui características de rede e segurança que o diferenciam das demais edições do SQL Server 2005. Neste artigo pretendo fazer uma introdução básica sobre o SQL Server Express 2005, falando sobre suas principais características e fazendo uma comparação com o atual MSDE 2000. Esta edição do SQL Server Express tem como grande promessa uma superior facilidade de utilização com um processo de instalação simples e robusto e com uma ferramenta gráfica (SQL Express Manager), que permitirá realizar a adminsitração do servidor de uma forma simples e prática. Esta ferramenta gráfica ainda esta em desenvolvimento e será disponibilizada como um download gratuíto no site da Microsoft. O SQL Server Express foi desenvolvido tendo em mente duas utilizações básicas: A primeira, como um servidor de produtos, especialmente como um Web Server ou Database Server. O segundo, como um cliente stand-alone, onde a aplicação não precise depender de uma rede para obter acesso aos dados. O Engine (Motor) O SQL Server Express usa o mesmo engine que as demais edições do SQL Server 2005, mas por ser uma edição digamos, light, possui algumas limitações. O engine suporta 1CPU, 1GB RAM e banco de dados com até 4GB. Uma mudança significativa em relação ao MSDE 2000 é que o engine do SQL Express não possui a limitação de usuários concorrentes, conhecida como “Concurrent Workload Governor” onde a performance do MSDE 2000 é extremamente prejudicada na medida em que as conexões concorrentes de usuários aumentam. Para saber mais sobre esta limitação do MSDE 2000, clique aqui. O SQL Server Express até pode ser instalado em máquinas multiprocessadas mas somente 1 CPU será reconhecida pelo engine. Como consequência, características como execução de consultas em paralelo não é suportado pelo SQL Server Express. O limite de 1GB RAM é apenas para o buffer pool. O buffer pool é usado para o armazenamento de páginas de dados e outras informações. A memória necessária para o gerenciamento de conexões, locks e outros não estão incluídos neste limite de 1GB. Sendo assim, o SQL Express pode ser instalado normalmente em máquinas com mais de 1GB, mas ele nunca usará mais que 1GB para o buffer pool. AWE ou /3GB não é suportado. O limite de 4GB para o banco de dados é aplicado apenas para o arquivo de dados. Entretanto, não existe limite para o número de banco de dados que você pode colocar no servidor. O SQL Server Express suporta instalação side-by-side com outras versões do SQL Server, podendo coexistir na mesma máquina junto com instalações do SQL Server 2000, SQL Server 2005 ou MSDE 2000. Suporta um número máximo de 50 instâncias na mesma máquina desde que cada instância seja unicamente identifica, ou seja, você pode realizar até 50 instalações do SQL Express desde que cada instância tenha um nome diferente. Por padrão o SQL Server Express é instalado com uma named instance chamada SQLEXPRESS.
  • 72. Pág.: 72 / 86 Apostila de MS SQL Server Ferramentas Diferente do MSDE 2000 que não possui ferramenta gráfica, o SQL Server Express possuirá uma ferramenta gráfica chamada SQL Server Management Studio Express (SSMSE). Esta, ainda em fase de desenvolvimento, mas já disponível para download público, será uma versão ligth do atual SQL Server Management Studio disponível nas demais edições do SQL Server 2005 e permitirá uma fácil administração dos bancos de dados. O SSMSE suportará conexões para SQL Server Express e outras edições do SQL Server 2005, SQL Server 2000 e MSDE 2000. Uma janela de conexão guiará o usuário através da seleção de uma instância e o método de autenticação a ser utilizado, suportando conexões locais ou remotas. Diversas funcionalidades de gerenciamento de banco de dados estarão disponíveis através do menu de contexto (botão direito) e wizards. Entre elas podemos citar, criar e modificar banco de dados, tabelas, usuários e logins. O Query Editor do SSMSE também permitirá o desenvolvimento e execução de instruções T-SQL e scripts.
  • 73. Apostila de MS SQL Server Pág.: 73 / 86 Funcionalidades O SQL Server Express suporta a maioria das funcionalidades do SQL Server 2005. A tabela abaixo mostra algumas características e componentes suportados: Stored Procedures SQL Computer Manager Views Replication (as a subscriber only) Triggers Advanced Query Optimizer Cursors SMO / RMO Sqlcmd and osql utilities Integration with Visual Studio 2005 Snapshot Isolation Levels Service Broker (as a client only) Native XML support, including XQuery and XML Schemas SQL CLR T-SQL language support Multiple Active Result Sets (MARS) Tabela 01 A tabela abaixo destaca os principais componentes do SQL Server 2005 que não são suportados nesta versão do SQL Express Edition: - Reporting Services Notification Services Analysis Services SQL Agent Full text search DTS OLAP Services / Data Mining English Query
  • 74. Pág.: 74 / 86 Apostila de MS SQL Server SQL Server Management Studio Express (SSMSE). O Microsoft SQL Server 2008 Management Studio Express (SSMSE) é um ambiente de desenvolvimento integrado gratuito para acessar, configurar, gerenciar e desenvolver todos os componentes do SQL Server. O SQL Server 2008 Management Studio Express combina um amplo grupo de ferramentas gráficas com editores de scripts sofisticados que fornecem acesso ao SQL Server a desenvolvedores e administradores de todos os níveis de experiência. Desenvolvedores terão uma experiência familiar e os administradores de banco de dados terão um único utilitário abrangente que combina ferramentas gráficas fáceis de usar com sofisticadas capacidades de script. Figura 01
  • 75. Apostila de MS SQL Server Pág.: 75 / 86 Anexo - 3 Suporte a Rede Embora o usuário possa habilitar o suporte a protocolos como TCP/IP e Named Pipes , por padrão o SQL Server Express é instalado apenas com suporte a shared memory. Isto faz com que por default o SQL Server Express funcione apenas localmente na máquina onde foi instalado e não suporte conexões de clientes em uma rede. Para suportar conexões de clientes remotos, é necessário habilitar o suporte a rede no SQL Server Express. Para habilitar o suporte a rede, você tem as seguintes opções: -Usar o SQL Server Configuration Manager para habilitar os protocolos necessários (normalmente TCP/IP) e iniciar o serviço SQL Server Browser. A figura abaixo mostra o uso do SQL Server Configuration Manager para habilitar protocolos de rede. Você pode acessar a funcionalidade descrita acima, clicando em Iniciar / Programas / Microsoft SQL Server 2005 / Configuration Tools / SQL Server Configuration Manager no menu suspenso do seu Windows. Figura 02 O SQL Browser é um novo serviço do SQL Server 2005 que identifica as portas que as named instances estão usando. Este serviço vem desativado por default e deve ser ativado para que a comunicação entre um cliente remoto e um servidor SQL Server Express funcione corretamente. Complementando a configuração necessária, observe a Figura 03, onde a propriedade Enabled é habilitada (Yes). Observe ainda a Figura 04 onde as propriedades Active e Enabled também devem estar habilitadas (Yes).
  • 76. Pág.: 76 / 86 Figura 03 Figura 04 Apostila de MS SQL Server
  • 77. Apostila de MS SQL Server Pág.: 77 / 86 Anexo – 4 Acessando o utilitário Microsoft SQL Server Management Studio Express Por último, acessando o utilitário Microsoft SQL Server Management Studio Express, clique no nó Logins escolhendo em seguida o login SA (naturalmente com o botão direito do mouse) acessando Propriedades no menu suspenso. A Figura abaixo será exibida, devendo ser observado em Login name a opção SQL Server Authentication. Defina um valor para password e pronto. Figura 05
  • 78. Pág.: 78 / 86 Apostila de MS SQL Server Anexo – 5 Exercícios Extras Variações do Comando Select Subqueries (Exists, Not Exists, In e Not In) Select Clientes.Nome From Clientes Where Exists (Select * From Pedidos Where Clientes.ID_Cliente = Pedidos.ID_Cliente) Select Clientes.Nome From Clientes Where Not Exists (Select * From Pedidos Where Clientes.ID_Cliente = Pedidos.ID_Cliente) Select Produtos.Descricao From Produtos Where Produtos.ID_Produto In (Select Itens.ID_Produto From Itens Where Itens.Quantidade > 100 ) Select Produtos.Descricao From Produtos Where Produtos.ID_Produto Not In (Select Itens.ID_Produto From Itens Where Itens.Quantidade > 100 ) Obtendo Dados pela União de Tabelas ou Views (Union) Select Clientes.Nome, Clientes.Cnpj From Clientes Union Select Fornecedores.Nome, Fornecedores.Cnpj From Fornecedores Obtendo Melhor Performance com o Operador Like Select Clientes.Nome From Clientes Where Clientes.Nome Like 'Mar%' Pode alcançar melhor performance se substituida por: Select Clientes.Nome From Clientes Where Clientes.Nome >= 'Mar' And Clientes.Nome Like 'Mar%'
  • 79. Apostila de MS SQL Server Pág.: 79 / 86 Criar as seguintes tabelas e Índices Associado Create Table Associado( Id Int Nome Varchar(50) Cidade Varchar(25) Estado Char(2) Data DateTime) Not Null, Not Null, Not Null, Not Null, Especialidade Create Table Especialidade( Id Int Descricao Varchar(25) Not Null, Not Null) Associado_Especialidade Create Table Associado_Especialidade( Id Int Not Null, AssociadoID Int Not Null, EspecialidadeID Int Not Null) Nota 1: Entidades Associado e Especialidade referem-se as tabelas que identificam os agentes do projeto. Já Associado_Especialidade, armazena os relacionamentos possíveis entre associados e especialidades. Nota 2: Quanto a chave primária, para Associado e Especialidade, os respectivos campos iniciados com Id compõem a chave primária; e para a tabela Associado_Especialidade, que numa visão clássica, as duas colunas, a saber, AssociadoID e EspecialidadeID iriam compor a chave primária. Mas numa visão mais atualizada, cada entidade deve ter um atributo que defina sua chave primária, logo o campo ID é inserido neste contexto para servir de chave primária para esta entidade. Nota 3: Finalizando a estrutura, observa-se que as colunas AssociadoID e EspecialidadeID da tabela Associado_ Especialidade, são individualmente chave estrangeira, respectivamente com referência as tabelas Associado e Especialidade. Nota 4: Adicionar 4 registros a tabela Associado, 4 registros a tabela Especialidade e pelo menos 8 registros na tabela Associado_Especialidade. Nota 5: Criar índices para os campos nome, cidade e estado da tabela Associado e índice para o campo descricao da tabela Especialidade.
  • 80. Pág.: 80 / 86 Apostila de MS SQL Server Obs.: Usar a seguinte nomenclatura: Idx_campo_tabela CREATE INDEX idx_Nome_Associado ON Associado(Nome) CREATE INDEX idx_Cidade_Associado ON Associado(Cidade) CREATE INDEX[idx_Estado_Associado ON Associado(Estado) CREATE INDEX idx_Descricao_Especialidade ON Especialidade(Descricao) Criar as Seguintes Views -View que retorne a quantidade de cadastros de Associados por mês Select From Group by Convert(Varchar(15), Datepart(mm,A.Data)) + '-' + Convert(Varchar(15), Datepart(yy,A.Data)) AS 'Mes-Ano', Count(A.nome) As Qtd Associado A Convert(Varchar(15), Datepart(mm,A.Data)) + '-' + Convert(Varchar(15), Datepart(yy,A.Data)) -View que retorne quantas especialidades tem cada associado, com mais de uma especialidade. Select A.Nome, Count(AESP.Id_Associado) As Qtd From Associado A INNER JOIN Associado_Especialidade AESP On A.Id_Associado = AESP.AssociadoID Group by A.Nome Having Count(AESP.AssociadoID) > 1
  • 81. Apostila de MS SQL Server Pág.: 81 / 86 Criar as Seguintes Procedures -Criar uma procedure para a inclusão de associados, possibilitando alteração e exclusão. Também implementar tratamento de erros (exception) e controle de Transação. Create procedure @Id @cidade @data ) As Proc_Manut_Associados( Int, @nome Varchar(25), @estado DateTime, @operacao Varchar(50), Char(2), Char(1) Declare @Msg Varchar(255), @Erro int BEGIN If @operacao = 'I' Begin Insert Into Associado(Id, nome, cidade, estado, data) Values(@Id, @nome, @cidade, @estado, @data) set @Erro = @@Error If @Erro <> 0 Begin Select @Msg = 'Operação não realizada devido ao seguinte erro: ' + Convert(Varchar(255),@Erro) Raiserror(@Msg,10,1) End End Else If @operacao = 'A' Begin Update Where Associado Set Associado.Nome = @nome, Associados.Cidade = @cidade, Associado.Estado = @estado, Associados.Data = @data, Associado.Id = @id set @Erro = @@Error If @erro <> 0 Begin End Else Begin End Select @Msg = 'Operação não realizada devido ao seguinte erro: ' + Convert(Varchar(255),@Erro) Raiserror(@Msg,10,1) Delete Associado Where Associado.Id = @id set @Erro = @@Error If @erro <> 0 Begin End End End Select @Msg = 'Operação não realizada devido ao seguinte erro: ' + Convert(Varchar(255),@Erro) Raiserror(@Msg,10,1)
  • 82. Pág.: 82 / 86 Apostila de MS SQL Server -Criar uma Procedure que retorna a quantidade de associados que tenham especialidades por estado. Esta Procedure deverá prover um parâmetro para escolha do estado. CREATE Procedure Begin Select From On Where End Proc_QtdeAssociados_Estado(@estado char(2)) As Count(Associado.Id) Associado INNER JOIN Associado_Especialidade Associado.Id = Associado_Especialidade.AssociadoID Associado.estado = @estado
  • 83. Apostila de MS SQL Server Pág.: 83 / 86 Criar as Seguintes Triggers -Criar Trigger que dispare uma exceção, quando da inclusão ou alteração na tabela especialidades, provocar um conteúdo para o campo descrição com menos de três caracteres. CREATE TRIGGER Trig_Valida_Descricao ON Especialidade FOR INSERT, UPDATE AS Declare @Tam int Begin Select @Tam = Convert(int , DataLength ( Inserted.Descricao)) From Inserted If @Tam < 3 Begin Raiserror ('Erro' ,10,1) Rollback End End -Criar uma Trigger que limite o total de especialistas de uma especialidade(Descricao) em no máximo 4 (quatro), por Estado. Create Trigger Trig_Controla_Limite_Especialistas on Associado_Especialidade For Insert, Update AS Declare @total Numeric, @estado Char(2) Begin Select @estado = Associado.Estado From Associados , Inserted Where Associado.Id = Inserted.Id Select From INNER JOIN On INNER JOIN On Where @total = Count(Associado.Estado) Associado Associado_Especialidade Associados.Id = Associado_Especialidade.AssociadoID Inserted Associado_Especialidade. EspecialidadeID = Inserted.EspecialidadeID Associado.Estado = @estado If @total > 4 Begin Raiserror('Minha Mensagem.....',10,1) End End
  • 84. Pág.: 84 / 86 Apostila de MS SQL Server Anexo – 6 Tabelas Particionadas Tabela Particionada? O que é isso? A maneira mais simples de entender este conceito é através de um exemplo. Imagine que você tenha que armazenar em uma tabela todas as notas fiscais emitidas por uma cadeia nacional de “fast food” em suas centenas de lojas pelo Brasil. A tabela deve ficar grande, não? Agora imagine o trabalho que as operações do dia-a-dia realizam nesta tabela. Não só Inserções, Consultas e Alterações, mas também operações de Backup, Ordenação, Desfragmentação… Agora pense na seguinte solução: Armazenar as notas fiscais referentes a cada mês em uma partição desta tabela. Algo como ter um caderninho para controle de cada mês. Não fica bem mais fácil? Na maior parte do tempo, você só manipulará os dados do mês atual. Você pode até manter a partição do mês atual como “read-write” e as outras como “read-only”. Talvez você não precise de backups diários das partições relativas a meses anteriores, o que reduzirá drasticamente a janela de backup! Ilustração de Tabela Particionada Aumentando o Desempenho com múltiplos discos Agora uma afirmação que pode causar espanto. Pode ser intuitivo pensar que é vantajoso, do ponto de vista de desempenho, colocar cada partição em um disco físico separado, não é mesmo?. A princípio, temos a impressão que estaremos utilizando todos os discos ao mesmo tempo, o que melhora o desempenho. Pois não é bem assim... Apesar dos ganhos de desempenho serem claros nas operações que acabamos de discutir em tabelas particionadas, o SQL Server executa operações de ordenação em uma partição de cada vez. Em outras palavras: somente um disco seria utilizado por vez, o que reduziria o desempenho... A maneira mais eficiente de utilizar múltiplos discos é configurando volumes distribuídos em vários discos, em estruturas RAID. Desta forma, mesmo quando uma operação de ordenação é realizada numa única partição, todos os discos da estrutura RAID são utilizados em paralelo. Interessante, não? :) Próximos Passos… Obs.: No SQLEXPRESS, Não permite criação de particionamento.
  • 85. Apostila de MS SQL Server Pág.: 85 / 86 1. Criar a seguinte Tabela: CREATE TABLE LANCAMENTO_CONTABIL ( ID_LANCAMENTO_CONTABIL BIGINT NOT NULL, DATA_LANCAMENTO DATETIME, DATA_FATO DATETIME, ID_CONTA_CONTABIL INT, VALOR MONEY ) 2. Criar a função de particionamento com DataType DATETIME como parâmetro CREATE PARTITION FUNCTION PF_Tabela_Lancamento_Contabil(DATETIME) AS RANGE RIGHT FOR VALUES ( '2006-07-01', '2006-10-01', '2007-01-01', '2007-04-01') Obs.: Surgirar a seguinte Msg: ”Msg 7736, Level 16, State 1, Line 3 Partition function can only be created in Enterprise edition of SQL Server. Only Enterprise edition of SQL Server supports partitioning.” 3. Adicionar 10 FILEGROUPS ao Banco de Dados ALTER DATABASE DBA ADD FILEGROUP FG_TAB_LancContab_QBASE ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q1 ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q2 ALTER DATABASE DBA ADD FILEGROUP FG_TABLancContab _Q3
  • 86. Pág.: 86 / 86 Apostila de MS SQL Server 4. Implementar a Partition Scheme PS_Tabela_Lancamento_Contabil, com a Partition Function PF_Tabela_Lancamento_Contabil como parâmetro CREATE PARTITION SCHEME PS_TabelaXPTOQuarterly AS PARTITION PFTabelaXPTOQuarterly TO ( FG_TAB_LancContab_QBASE FG_TABLancContab _Q1, FG_TABLancContab _Q2, FG_TABLancContab _Q3 ) • Nesta situação, o primeiro FG tem todos os dados desde Abril 2006 até Julho 2006. • Os seguintes FG’s tem a data que correspondente ao valor de cada partition. • O último FG tem todos os dados com data superior a Abril 2008.