Escolar Documentos
Profissional Documentos
Cultura Documentos
: 1 / 80
Conceito
Banco de Dados Relacional
Banco de Dados Cliente-Servidor
Processo Servidor
Processo Cliente
Integridade Relacional
Controle de Transações
Estrutura
Criar Banco de Dados
Criar e Administrar Arquivos Secundários
Criar tabelas
Criar tabelas Temporárias
Criar tabelas Particionadas
Criar Chave Primária
Criar Chave Estrangeira
Criar Índices
Estabelecer Logins
Criar Usuários
Estabelecer Permissões
Criar Default
Criar Rules
Criar Role
Criar View
Criar Stored Procedures
Criar Trigger
Criar Cursor
Criar Script
Criar/Executar Backup / Restore
Linguagem SQL
DML
DDL
DQL
DCL
Pág.: 2 / 80
Apostila de MS SQL Server
Conceitos
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.
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.
Apostila de MS SQL Server Pág.: 3 / 80
Sessões de SQL
É 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.
Arquitetura Cliente-Servidor
O SQL Server 2005 é 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.
Pág.: 4 / 80
Apostila de MS SQL Server
Arquitetura do SQL Server
O Banco de dados SQL Server 2005 é 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.
. Bancos de
MASTER dados do
sistema
System System System
tables tables
Sytem
tables
Bancos de
dados de
System System usuário
Tables Tables
SAU02 SAU05
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:
Com estas informações, é valido dizer que um backup atual do banco de dados master é crucial para
qualquer recuperação do servidor.
Apostila de MS SQL Server Pág.: 5 / 80
O processo de instalação cria o banco de dados master (master.mdf) e o arquivo de log do banco de
dados master (mastlog.ldf) no diretório do C:\Arquivos de programas\Microsoft SQL
Server\MSSQL\Data. 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 programas\Microsoft SQL Server\80\Tools\Binn.
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 programas\Microsoft
SQL Server\MSSQL\Data.
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:
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 programas\Microsoft SQL Server\MSSQL\Data. 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
programas\Microsoft SQL Server\MSSQL\Install.
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.
Pág.: 6 / 80
Apostila de MS SQL Server
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 programas\Microsoft SQL Server\MSSQL\Data, durante o processo de
instalação.
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.
LOG ON
( NAME = 'Aulalog',
FILENAME = 'C:\DiretorioBanco\BancoAula\Aula.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
Propriedade Definição
Logical Name Nome da base de dados. Referenciado em conexões.
File Type Tipo de dados armazenado. Dados ou Log de operações.
File Group Grupo a que pertence o arquivo, identificado por um endereço físico.
Initial Size Tamanho inicial do arquivo de dados. Apartir de MB.
Propriedade Definição
Enabled Autogrowth Habilita ou não crescimento automático, baseado em parâmetros.
File Growth 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
Apostila de MS SQL Server Pág.: 11 / 80
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
ALTER INDEX
DROP INDEX
INSERT
UPDATE
DELETE
ALTER PASSWORD
GRANT
REVOKE
CREATE SYNONYM
START AUDIT
STOP AUDIT
Apostila de MS SQL Server Pág.: 13 / 80
COMMIT
ROLLBACK
SAVEPOINT
SET TRANSACTION
Comando Definição
Commit Salvar transações dentro do banco de dados.
RollBack Desfaz transações dentro do banco de dados.
Cria pontos dentro de grupos de transações até que eles desfaçam
SavePoint
as transações com rollback ou salvar com commit.
Set Transaction Atribui um nome em uma transação.
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.
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.
Atributos: São as características das entidades. São representadas pelas colunas das tabelas. Ex:
nome, endereço, telefone e etc.
Campo: É uma coluna em uma tabela que é projetada para manter informações específicas sobre cada
registro na tabela. Ex:
Registro ou Linha de dados: É cada entrada individual que existe em uma tabela. Ex:
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.: 15 / 80
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.
Nota 01:
Observe a tabela de tipos, 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 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.
Constraints
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):
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:
Utilizando o wizard específico no Enterprise Manager, podemos facilmente definir a Primary Key
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”.
Apostila de MS SQL Server Pág.: 21 / 80
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:
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:
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.clientes’
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).
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.
Diagrama
Clientes * Produtos *
ID_Cliente ID_Produto
Nome Descricao
Cnpj PrecoCompra
Tipo Saldo
Status
Data
Historico
FK_Pedidos_Clientes Foto
Credito
FK_Itens_Produtos
Pedidos * Itens *
ID_Pedido ID_Pedido
ID_Cliente FK_Itens_Pedidos ID_Produto
DataPed Quantidade
PrecoVenda
Apostila de MS SQL Server Pág.: 24 / 80
Propriedade Definição
Í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:
Propriedade Definição
Propriedade Definição
Tabelas Particionadas
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!
• 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.
Apostila de MS SQL Server Pág.: 31 / 80
Linguagem SQL
Inserindo Dados
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. Também é possível inserir dados parciais de apenas algumas colunas
desde que as mesmas não estejam definidas como NOT NULL.
Tabela de Clientes
Tabela de Pedidos
Tabela de Produtos
Tabela de Itens
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.
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:
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:
SELECT listas_de_colunas
FROM listas_de_tabelas
WHERE 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
Exemplo 01:
Exemplo 02:
Funções
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.
SUM
É utilizada para retornar um total nos valores de uma coluna para um grupo de linhas.
MAX
A função MAX é utilizada para retornar o valor máximo para valores de uma coluna em um grupo de
linhas.
MIN
A função MIN retorna o valor mínimo de uma coluna para um grupo de linhas.
AVG
A função AVG retorna o valor médio não ponderado de uma coluna para um grupo de linhas.
SELECT Cl.nome,
Cl.credito,
Pe.DataPed,
Sum(It.Quantidade * It.PrecoVenda) As Total
ou
SELECT Clientes.nome,
Clientes.credito,
Pedidos.DataPed,
Sum(Itens.Quantidade * Itens.PrecoVenda) As Total
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.
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.
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.
LIKE
É utilizado para comparar um valor com valores semelhantes utilizando operadores curinga (%)
porcentagem ou (_) sublinhado.
-Exemplolo: Localiza quaisquer valores que comecem com PAB
-Exemplo: Localiza quaisquer valores que contenham ABL a partir da segunda casa e terminem com
quaisquer valores.
EXISTS
É utilizado para procurar a presença de uma linha em uma tabela específica que atenda a certos
critérios. Veja como pesquisar para ver se id_cliente 982 está na tabela clientes.
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)
Apostila de MS SQL Server Pág.: 39 / 80
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.Para esse exemplo
vamos adicionar uma nova tabela em nosso banco:
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.
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:
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:
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.
FROM Clientes
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.
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.: 43 / 80
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:
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
Apostila de MS SQL Server Pág.: 44 / 80
BEGIN
Begin Transaction
If @@Error = 0
Begin
Commit Transaction
Return (0)
End
Else
Begin
Rollback Transaction
Return (1)
End
END
Apostila de MS SQL Server Pág.: 45 / 80
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
BEGIN
Select Produtos.Descricao,
Sum(Itens.Quantidade * Itens.Precovenda) As Total
From Produtos INNER JOIN Itens
On Produtos.ID_Produto = Itens.ID_Produto
INNER JOIN Pedidos
On Pedidos.ID_Pedido = Itens.ID_Pedido
Where Pedidos.DataPed BetWeen @DataIni And @DataFim
Group By Produtos.Descricao
Having Sum(Itens.Quantidade * Itens.Precovenda) > @Valor
Order By Produtos.Descricao
END
Apostila de MS SQL Server Pág.: 46 / 80
BEGIN
END
Apostila de MS SQL Server Pág.: 47 / 80
BEGIN
open cursorx
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
END
Apostila de MS SQL Server Pág.: 48 / 80
BEGIN
open cursorx
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
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.
Rollback
END
END
Controle de Transação
Begin
Begin Tran
Save Tran Trans1
Insert Into Produtos(Descricao, Saldo, PrecoCompra)
Values('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(Descricao, Saldo, PrecoCompra)
Values('Novo Produto', 1200, 12.78)
If @@Error = 0
Begin
Print 'Cor não incluído.'
Rollback Tran Trans2
End
Commit Tran
End
Apostila de MS SQL Server Pág.: 53 / 80
Outros Objetos
Default
Rule
Criando Login
Criando Usuário
Criando Role
SP_Addrole Digidata_Role
Escolha do RoleName,
Apostila de MS SQL Server Pág.: 60 / 80
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.: 68 / 80
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').
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:
O Engine
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.
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.: 70 / 80
Figura 01
Apostila de MS SQL Server Pág.: 71 / 80
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).
Apostila de MS SQL Server Pág.: 72 / 80
Figura 03
Figura 04
Apostila de MS SQL Server Pág.: 73 / 80
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
Apostila de MS SQL Server Pág.: 74 / 80
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
A tabela seguinte também destaca algumas características do SQL Server 2005 e do SQL Server 2000 que não são
suportadas nesta versão do SQL Express:
Tabela 02
Apostila de MS SQL Server Pág.: 75 / 80
Exercícios Extras
Variações do Comando Select
Associado
Create Table Associado(
Id Int Not Null,
Nome Varchar(50) Not Null,
Cidade Varchar(25) Not Null,
Estado Char(2) Not Null,
Data DateTime)
Especialidade
Create Table Especialidade(
Id Int Not Null,
Descricao Varchar(25) 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.
Apostila de MS SQL Server Pág.: 77 / 80
-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.: 78 / 80
BEGIN
If @operacao = 'I'
Begin
Insert Into Associado(Id, nome, cidade, estado, data)
Values(@Id, @nome, @cidade, @estado, @data)
-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.
-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.
-Criar uma Trigger que limite o total de especialistas de uma especialidade(Descricao) em no máximo 4
(quatro), por Estado.
Begin
Select @estado = Associado.Estado
From Associados , Inserted
Where Associado.Id = Inserted.Id
If @total > 4
Begin
Raiserror('Minha Mensagem.....',10,1)
End
End