Você está na página 1de 101

Curso Microsoft

SQL Server 2008

Utilizando a Linguagem Transact SQL

MICROSOFT SQL SERVER 2008

NDICE
1.

INTRODUO............................................................................................................................. 4

2.

CONHECENDO O MICROSOFT SQL SERVER 2008.............................................................. 5

3.

PREPARANDO PARA INSTALAR O SQL SERVER 2008 ....................................................... 6


3.1. USANDO O SQL SERVER COM APLICATIVOS CLIENTE/SERVIDOR ..................................................... 8
3.2. DECIDINDO ENTRE COMPONENTES DO SQL SERVER ....................................................................... 9
3.3. FERRAMENTAS DO SQL SERVER 2008 (CATEGORIAS) .................................................................. 9
3.4. REQUISITOS DE HARDWARE DO SQL SERVER 2008 .......................................................... 12
3.4.1. REQUISITOS DE PROCESSADOR ..................................................................................... 12
3.4.2. REQUISITOS DE MEMRIA .............................................................................................. 12
3.4.3. REQUISITOS DE DISCO RGIDO ...................................................................................... 12
3.5. SQL SERVER MANAGEMENT STUDIO ............................................................................... 13
3.6. OS DATABASES DO SQL-SERVER........................................................................................ 15

4.

CRIAO DE UM DATABASE................................................................................................ 21
4.1. Criando um Banco de Dados com a utilizao do SQL SERVER Management Studio .............. 21
4.2. Criao de um Banco de Dados atravs de Scripts.................................................................. 23
4.3. CARACTERSTICA DE UM DATABASE ................................................................................ 24

5.

CRIAO DE TABELAS .......................................................................................................... 24


5.1. Datatypes do SQL Server........................................................................................................ 25
Nulabilidade ................................................................................................................................. 27
Constraints: Integridade ............................................................................................................... 27
Primary Key(Chave Primria): ..................................................................................................... 27
Foreign Key(Chave Estrangeira): ................................................................................................. 28
AutoNumerao ............................................................................................................................ 29
5.2. Criao de Tabelas no Banco de Dados criado anteriormente com a utilizao de scripts ....... 30
5.3. Alterando a estrutura de uma tabela ....................................................................................... 32
5.4. Criando um Diagrama ........................................................................................................... 33

6.

INSERT (INSERE REGISTRO) ................................................................................................ 35

7. UPDATE (ALTERA VALOR DO REGISTRO)............................................................................ 36


8. DELETE (EXCLUSO DE REGISTROS) ................................................................................... 38
9. APRESENTANDO O SISTEMA INFONEW ................................................................................ 39
9.1 OS OBJETIVOS GERAIS DO INFONEW SO: ...................................................................... 39
PARTE 1 MANTER DADOS A RESPEITO DOS CLIENTES DA EMPRESA .................................................. 39
PARTE 2 ANLISE DO CREDITO DO CLIENTE .................................................................................... 40
PARTE 3 MANTER DADOS A RESPEITO DOS PRODUTOS A SEREM VENDIDOS ...................................... 40
PARTE 4 MANTER E GERENCIAR OS PEDIDOS DE COMPRA FEITOS PELOS CLIENTES ........................... 41
PARTE 5 MANTER DADOS A RESPEITO DOS FUNCIONRIOS .............................................................. 41
9.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA INFONEW .................................... 42
10. SELECT (CONSULTA) ............................................................................................................... 43
10.1 ORDER BY (ORDEM DE RETORNO) ............................................................................................ 44
10.2 ALIAS (APELIDO) ..................................................................................................................... 45
10.3 WHERE (RESTRIES) .............................................................................................................. 46
10.4 BETWEEN (CONDIO COM UMA FAIXA DE VALORES) .............................................................. 47
10.5 LIKE (COMPARAO COM UMA PARTE DE UMA LITERAL)............................................................ 48

Banco de Dados
Autor: Nilson A. Borges

2 de 101

MICROSOFT SQL SERVER 2008


10.6 DISTINCT (VALORES NICOS) ............................................................................................. 49
11. FUNES DE AGRUPAMENTO ............................................................................................... 50
11.1 COUNT (CONTADOR DE REGISTROS) ......................................................................................... 50
11.1.1 GROUP BY (Agrupamento de dados).................................................................................. 51
11.2 SUM (SOMATRIA DE VALORES) ................................................................................................ 52
11.3 AVG (MDIA DE VALORES) ....................................................................................................... 53
11.4 MIN, MAX (MENOR E MAIOR VALOR) ........................................................................................ 54
12. HAVING (CONDIO DO AGRUPAMENTO)......................................................................... 55
13. IN (CONDIO COM VALORES FIXOS) ................................................................................ 56
14. SUBQUERIES (PESQUISA DENTRO DE UM COMANDO) .................................................... 57
15. JOIN (RELACIONAMENTO DE TABELAS) ............................................................................ 59
15.1 INTRODUO A JOINS: ............................................................................................................... 59
15.2 TIPOS DE JOINS ...................................................................................................................... 59
15.2.1 Usando Inner Joins: ........................................................................................................... 59
15.2.2 Usando Outer Joins: .......................................................................................................... 60
15.2.3. Usando Cross Joins: .......................................................................................................... 62
15.4 COMBINAO DE MAIS DE 2 TABELAS ........................................................................................ 64
16. CRIANDO VISES (VIEW)........................................................................................................ 65
17. CRIANDO FUNCTION (UDF :FUNCES DEFINIDAS PELO O USURIO )........................ 67
18.1 DEFININDO UMA FUNCTION UDF: ............................................................................................... 68
18.2 TIPOS DE FUNCTION: ................................................................................................................. 70
18.2.1. Funes Scalar valued: ..................................................................................................... 70
18.2.2. Funes Table Valued: ...................................................................................................... 72
18.2.3. Funes Multi-Statement Table Valued: ............................................................................. 75
18. CRIANDO STORED PROCEDURE (PROCEDIMENTOS) ...................................................... 77
19. CRIANDO TRIGGERS (GATILHOS ) ....................................................................................... 91
CONSIDERAES FINAIS .......................................................................................................... 100
REFERNCIAS BIBLIOGRFICAS: ............................................................................................ 101

Banco de Dados
Autor: Nilson A. Borges

3 de 101

MICROSOFT SQL SERVER 2008

1. INTRODUO
Veremos nesta apostila de forma simplificada os comandos de
manipulao e consultas de dados, bem como suas clausulas, operadores e
funes. Para isso estaremos utilizando o gerenciador de banco de dados
Microsoft SQL Server 2008.
O comando Transact-SQL uma linguagem estruturada para consultas,
utilizada no banco de dados da Microsoft, o SQL Server 2008.
Veja em seguida uma lista dos comandos Transact SQL.
DCL Data Control Language Linguagem de Controle de Dados.
GRANT
Concede permisses.
DENY
Nega permisses.
REVOKE Revoga a concesso ou a negao de permisso.
DDL- Data Definition Language- Linguagem de Definio de dados.
CREATE
Cria objeto no sistema.
ALTER
Altera a estrutura dos objetos.
DROP
Elimina objetos do sistema.
DML- Data Manipulation Language Linguagem de Manipulao de Dados.
SELECT
L dados de tabelas e views.
INSERT
Insere dados em tabelas.
UPDATE
Altera dados da tabela.
DELETE
Exclui dados das tabelas.
BACKUP
Realiza backup de dados.
RESTORE
Restaura dados de um backup
BULK INSERT Realiza a incluso de grande quantidade de dados em uma
tabela.

Banco de Dados
Autor: Nilson A. Borges

4 de 101

MICROSOFT SQL SERVER 2008

2. Conhecendo o Microsoft SQL Server 2008


O Microsoft SQL Server 2008 um gerenciador de Banco de Dados que
pode ser implementado em sistemas de duas ou mais camadas. Para a
implementao de sistemas ele contm a linguagem Transact-SQL que segue
o padro SQL-92. Ele possui as estruturas adequadas para que voc crie e
gerencie sistemas de Banco de Dados OLTP (On-Line Transaction Processing)
Processamento Baseado em Transaes e Banco de Dados OLAP (On-Line
Analytical Processing) Processamento Baseado em Anlise dos Dados,
sistema de Tomada de Deciso (DW).
Alm de o software oferecer mecanismos suficientes para que voc
possa implementar sistemas ntegros e consistentes com relao aos seus
dados, ele oferece algumas ferramentas grficas e alguns assistentes que
facilitam o gerenciamento do sistema. Com estas ferramentas voc poder:

Criar e configurar Databases e seus objetos;

Transformar dados que esto em um determinado formato em outro e


transferir dados que esto em um determinado sistema para o SQL
Server 2008 e vice-versa;

Implementar replicao dos dados entre dois ou mais servidores;

Realizar Transaes distribudas em dois ou mais servidores;

Criar tarefas que devem ser executadas automaticamente com base em


horrios ou na ocorrncia de erros;

Implementar a segurana de acesso aos dados, limitando as atividades


dos usurios dentro do database;

Realizar cpias de segurana dos seus dados para que, se algum


problema acontecer no sistema, essas cpias possam ser restauradas,
evitando assim perda de informaes;

Transformar dados n o formato XML;

Gerenciar os processos realizados pelo prprio SQL Server 2008;

Controlar locks;

Analisar o processamento de pesquisas para ajustar a performance


delas;

Realizar o debug de suas stored procedures;


Banco de Dados

Autor: Nilson A. Borges

5 de 101

MICROSOFT SQL SERVER 2008

Trabalhar com vrias instances do SQL SERVER 2008 no mesmo


servidor;

Criar Databases com collations diferentes uns dos outros;

Criar as colunas das tabelas, do tipo caractere, com collations


diferentes;

Trabalhar com datatypes Unicode, etc.

3. PREPARANDO PARA INSTALAR O SQL SERVER


2008
O SQL SERVER 2008 est disponvel em vrias edies, cada qual
adequada a uma tarefa ou um ambiente especfico. importante entender
as diferenas entre as edies disponveis, de modo que voc possa
selecionar a mais apropriada para suas necessidades:

Datacenter ( *x86, *x64 e *IA64): Compilado no SQL Server 2008 R2


Enterprise, o SQL Server 2008 R2 Datacenter oferece uma plataforma de
dados de alto desempenho que possui os mais altos nveis de
escalabilidade para grandes cargas de trabalho de aplicativo, virtualizao,
consolidao e gerenciamento da infraestrutura de banco de dados de uma
organizao, ajudando a dimensionar o ambiente de misso crtica de forma
econmica.

Enterprise ( *x86, *x64 e *IA64): O SQL Server 2008 R2 Enterprise oferece


uma plataforma de dados abrangente que fornece segurana interna,
disponibilidade e escalabilidade, combinado com ofertas de business
intelligence, ajudando a habilitar os mais altos nveis de servio para cargas
de trabalho de misso crtica.

Banco de Dados
Autor: Nilson A. Borges

6 de 101

MICROSOFT SQL SERVER 2008


Standard (*x86 e *x64): O SQL Server 2008 R2 Standard oferece um
gerenciamento de dados completo e plataforma de business intelligence
para departamentos e organizaes pequenas executarem seus aplicativos,
ajudando a habilitar o gerenciamento de banco de dados efetivo com
recursos de TI mnimos.
SQL Server Developer (*x86, *x64 e *IA64): O SQL Server Developer
permite aos desenvolvedores criarem qualquer tipo de aplicativo com base
no SQL Server. Ele inclui todas as funcionalidades do SQL Server
Datacenter, mas licenciado para ser usado como um sistema de teste e
desenvolvimento, e no como um servidor de produo. O SQL Server
Developer a opo ideal para quem deseja desenvolver e testar
aplicativos. Voc pode atualizar o SQL Server Developer para uso em
produo.
SQL Server Workgroup (*x86 e *x64): O SQL Server Workgroup ideal
para executar bancos de dados de local de ramificao fornecendo um
gerenciamento de dados confivel e uma plataforma de relatrios que inclui
sincronizao remota segura e recursos de gerenciamento.
SQL Server Web (*x86, *x64): O SQL Server Web uma opo de
propriedade de baixo custo total para hosts e sites que fornece recursos de
escalabilidade e gerenciabilidade para propriedades da Web de pequeno a
grande porte.

SQL Server Express (*x86 e *x64): A plataforma de banco de dados do


SQL

Server Express tem sua base no SQL Server. Ele tambm substitui

o Microsoft Desktop Engine (MSDE). Por ser integrado ao Visual Studio, o


SQL Server Express facilita o desenvolvimento de aplicativos controlados
por dados que sejam ricos em recursos, seguros para armazenamento e
rpidos na implantao.

* Nota: x86: Windows 32 bits , x64: Windows 64 Bits e IA64: Windows 64 bits
Itanium

Banco de Dados
Autor: Nilson A. Borges

7 de 101

MICROSOFT SQL SERVER 2008


SQL Server Express com Advanced Services (*x86 e *x64): O SQL
Server Express gratuito e pode ser redistribudo por ISVs (sujeito a contrato).
O SQL Server Express ideal para aprendizagem e criao de aplicativos para
desktop e servidores pequenos. Esta edio a melhor escolha para
fornecedores de software independente, desenvolvedores no profissionais e
interessados que criam aplicativos cliente. Se precisar de recursos mais
avanados de banco de dados, o SQL Server Express pode ser perfeitamente
atualizado para verses mais sofisticadas do SQL Server
Compact 3.1 (*x86) e Compact 3.5 SP1 (*x86): SQL Server Compact 3.5
um banco de dados incorporado gratuito, ideal para construir aplicativos
autnomos e ocasionalmente conectados para dispositivos mveis, desktops e
clientes Web em todas as plataformas Windows.

3.1. Usando o SQL Server com aplicativos cliente/servidor


Voc pode instalar apenas os componentes clientes do SQL Server em
um computador que executa aplicativos cliente/servidor que se conectam
diretamente a uma instncia do SQL Server. A instalao dos componentes
cliente tambm uma boa opo se voc administra uma instncia do SQL
Server em um servidor de banco de dados ou se planeja desenvolver
aplicativos no SQL Server.
A opo de componentes clientes instala os seguintes recursos do SQL
Server: ferramentas de prompt de comando, ferramentas do Reporting
Services,

componentes

de

conectividade,

modelos

de

programao,

ferramentas de gerenciamento, ferramentas de desenvolvimento e os Manuais


On-line do SQL Server.

Banco de Dados
Autor: Nilson A. Borges

8 de 101

MICROSOFT SQL SERVER 2008

3.2. Decidindo entre componentes do SQL Server


Utilize a pgina Seleo de Recursos do Assistente para Instalao do
SQL Server para selecionar os componentes que deseja incluir em uma
instalao do SQL Server. Por padro, nenhum dos recursos na rvore est
selecionado.
Use as informaes nas tabelas a seguir para determinar o conjunto de
recursos mais adequado s suas necessidades.

3.3. Ferramentas do SQL SERVER 2008 (Categorias)

Mecanismo de Banco de Dados: O Mecanismo de Banco de Dados o servio


principal para armazenamento, processamento e segurana de dados. O Mecanismo
de Banco de Dados fornece acesso controlado e processamento rpido de transaes
para atender aos requisitos dos aplicativos de consumo de dados mais exigentes
dentro de sua empresa. O Mecanismo de Banco de Dados tambm fornece suporte
rico para sustentar alta disponibilidade.
Analysis Services-Dados Multidimensionais: O Analysis Services suporta
OLAP, permitindo ao usurio projetar, criar e gerenciar estruturas multidimensionais
que contenham dados agregados de outras fontes de dados, como bancos de dados
relacionais.
Analysis Services - Minerao de Dados: O Analysis Services permite a voc
projetar, criar, e visualizar modelos de minerao de dados. Estes modelos de
minerao podem ser construdos a partir de outras fontes de dados utilizando uma
diversidade de algoritmos de minerao de dados padro da indstria.
Integration Services : O Integration Services uma plataforma para construir
solues para integrao de dados de alto desempenho, inclui tambm pacotes que
fornecem processamento de extrao, transformao, e carregamento (ETL) para
armazenamento de dados.

Banco de Dados
Autor: Nilson A. Borges

9 de 101

MICROSOFT SQL SERVER 2008

Replicao: A replicao um conjunto de tecnologias para copiar e distribuir


dados e objetos de um banco de dados para outro e, em seguida, sincronizar os
bancos de dados para manter a consistncia. Ao usar a replicao, possvel
distribuir dados para diferentes locais e para usurios remotos e mveis atravs de
redes locais e de longa distncia, conexes dial-up, conexes sem fio e a Internet.
Reporting Services: O Reporting Services fornece s corporaes a
funcionalidade de relatrios online possibilitando criar relatrios que se conectam a
contedos de vrias fontes de dados, permite tambm, publicar os relatrios em
diversos formatos e alm disso centralizar o gerenciamento de segurana e de
assinaturas.
SQL Server Service Broker: O Service Broker auxilia os desenvolvedores a
construir aplicativos de banco de dados evolutivos e seguros. Esta nova tecnologia do
Mecanismo de Banco de Dados fornece uma plataforma de comunicao baseada em
mensagens que permite a componentes de aplicativos independentes funcionarem
como um todo. O Service Broker inclui infra-estrutura para programao assncrona
que pode ser usada em apenas um banco de dados ou apenas uma instncia, e
tambm para aplicativos distribudos.

Ferramentas de

Descrio

gerenciamento
SQL Server

O SQL Server Management Studio um ambiente integrado

Management Studio

para acessar, configurar, gerenciar, administrar e desenvolver


componentes do SQL Server. O Management Studio permite
que desenvolvedores e administradores com todos os nveis
de conhecimento usem o SQL Server. Internet Explorer 6
SP1 ou uma verso posterior requerido para a instalao do
Management Studio.

Banco de Dados
Autor: Nilson A. Borges

10 de 101

MICROSOFT SQL SERVER 2008

SQL Server

O SQL Server Configuration Manager fornece gerenciamento

Configuration Manager bsico de configurao para servios, protocolos do servidor,


protocolos do cliente e aliases do cliente do SQL Server
SQL Server Profiler

O SQL Server Profiler fornece uma interface grfica do


usurio para monitorar uma instncia do Mecanismo de
Banco de Dados ou do Analysis Services.

Orientador de

O Orientador de Otimizao do Mecanismo de Banco de

Otimizao do

Dados ajuda a criar conjuntos de ndices, exibies

Mecanismo de Banco

indexadas e parties ideais.

de Dados
Business Intelligence

O Business Intelligence Development Studio um IDE para

Development Studio

solues do Analysis Services, Reporting Services e do


Integration Services. Internet Explorer 6 SP1 ou uma verso
posterior requerido para a instalao do BI Development
Studio.

Componentes de

Instala componentes para comunicao entre clientes e

conectividade

servidores, e bibliotecas de rede para DB-Library, ODBC e


OLE DB.

Banco de Dados
Autor: Nilson A. Borges

11 de 101

MICROSOFT SQL SERVER 2008

3.4. REQUISITOS DE HARDWARE DO SQL SERVER 2008


Ao planejar uma instalao do SQL SERVER 2008, voc deve
garantir que o computador em que pretende instalar esse programa atenda aos
requisitos mninos de hardware e seja adequado s suas necessidades atuais
e futuras. Se as especificaes mnimas no forem atendidas, poder haver
falha na instalao de alguns ou de todos os componentes.

3.4.1. REQUISITOS DE PROCESSADOR


O processador no computador em que voc pretende instalar o SQL
SERVER deve ser compatvel com Intel Pentium III ou superior e possuir
velocidade de 1 GHz ou superior.
A Microsoft recomenda usar um processador de 2 GHz ou superior.

3.4.2. REQUISITOS DE MEMRIA


O SQL-Server 2008 necessita de no mnimo de 512 Mb de memria,
alm da necessria para o sistema para o sistema operacional.
A Microsoft recomenda pelo menos 1 Gigabyte (GB).
O SQL SERVER 2008 Express Edition requer no mnimo de 192 MB de
memria. A Microsoft recomenda pelo menos 512 MB.

3.4.3. REQUISITOS DE DISCO RGIDO


Os componentes de banco de dados do SQL SERVER 2008 requerem
entre 150 e 746 MB de espao em disco, dependendo das opes especificas
escolhidas. Uma instalaes tpicas requer 637 MB de espao em disco.
Se voc optar por instalar o SQL SERVER 2008 Analysis Services, ser
necessrio espao em disco adicional de 35 MB.
Se voc optar por instalar o SQL SERVER 2008 Reporting Services,
ser necessrio um espao em disco adicional de 40 MB.

Banco de Dados
Autor: Nilson A. Borges

12 de 101

MICROSOFT SQL SERVER 2008

Recurso

Requisito de espao em
disco

Mecanismo de Banco de Dados e arquivos de dados, 711 MB


Replicao e Pesquisa de Texto Completo
Analysis Services e arquivos de dados

345 MB

Reporting Services e Gerenciador de Relatrios

304 MB

Integration Services

591 MB

Componentes do cliente (exceto os Manuais Online e as 1.823 MB


ferramentas do Integration Services)
Manuais Online do SQL Server

157 MB

3.5. SQL SERVER MANAGEMENT STUDIO


Para entrar no SQL SERVER Management Studio :

Ir na Barra de Tarefas

Clicar no Boto Iniciar

Todos os Programas

Microsoft SQL Server 2008

SQL Server Management Studio

Figura 1: Tela de abertura do SQL SERVER Management Studio

Banco de Dados
Autor: Nilson A. Borges

13 de 101

MICROSOFT SQL SERVER 2008


Depois de aberto aparecer a tela a seguir:

Figura 2: Tela do SQL SERVER Management Studio

Com o SQL SERVER Management Studio, voc executa a maioria das


tarefas de administrao de banco de dados do SQL SERVER 2008. Voc
deve conhecer bem essa ferramenta para gerenciar adequadamente os
sistemas do SQL SERVER 2008
O SQL SERVER Management Studio fornece os seguintes recursos
para administradores:

Uma ferramenta integrada de gerenciamento e desenvolvimento


baseada no ambiente de desenvolvimento do Microsoft Visual
Studio.

Gerenciamento total de banco de dados relacionais, bancos de


dados do Analysis Services, Reporting Services, SQL Server
Integration Services (SSIS) e banco de dados do SQL Mbile.

Banco de Dados
Autor: Nilson A. Borges

14 de 101

MICROSOFT SQL SERVER 2008

Object Explorer( Explorador de objetos), que um painel grfico


do SQL SERVER Management Studio que voc pode usar para a
configurao de servidores, bem como para o gerenciamento e o
desenvolvimento de banco de dados.

Editores de consultas para gerenciamento e desenvolvimento


baseado em script. Os editores so fornecidos para consultas
Transact-SQL, MDX, DMX e XMLA.

Gerenciamento de scripts baseados em projeto, no qual scripts de


criao e gerenciamento de banco de dados podem ser
armazenados como um nico projeto e gerenciados por meio de
um painel do Solution Explorer (Explorador de Solues) no SQL
Server Management Studio.

O SQL SERVER Management Studio usa o Microsoft Visual


Studio Framework e inclui a funcionalidade do Visual Studio ao
criar consultas ou scripts, suporte a controle de origem para o
armazenamento e a manuteno de cpias de scripts, conforme o
seu desenvolvimento.

3.6. OS DATABASES DO SQL-SERVER


Uma vez instalado o SQL Server so criadas automaticamente quatro
databases:
a) master
b) model
c) tempdb
d) msdb

Banco de Dados
Autor: Nilson A. Borges

15 de 101

MICROSOFT SQL SERVER 2008


Depois, o poderemos criar e instalar nossos prprios bancos de dados
livremente, os quais sero os bancos de dados de usurio. Embora ambos os
tipos de bancos de dados (sistema e usurio) armazenem dados, o SQL Server
utiliza os bancos de sistema para operar e gerenciar o sistema. O catlogo de
sistema, por exemplo, consiste unicamente de tabelas armazenadas no banco
de dados master.
A figura a seguir ilustra os bancos de dados no SQL Server.
Bancos de
dados do
sistema

master
model

tempdb

msdb

System
tables

System
tables

System
tables

System
tables

SAU02

SAU05

System
tables

System
tables

Bancos de
dados de
usurio

Vejamos a funo de cada um dos bancos de sistema.


MASTER
Controla os bancos de dados de usurios e a operao do SQL Server,
por isso os dados armazenados em suas tabelas so crticos e deve-se sempre
manter backup atualizado. Ocupa inicialmente cerca de 17 Mbytes, mantendo:
a) contas de login;
b) processos em andamento;
c) mensagens de erro do sistema;
d) databases armazenados no servidor;
e) espao alocado a cada database;
f) locks ativos;
g) databases disponveis e dispositivos de dump;
h) procedimentos de sistema, que so primariamente utilizados para
administrao.

Banco de Dados
Autor: Nilson A. Borges

16 de 101

MICROSOFT SQL SERVER 2008


O banco de dados master contm 13 tabelas de uso compartilhado
com o sistema, conhecidas como Catlogo do Sistema ou Dicionrio de Dados,
que so:
1. syscharsets - cdigos de pgina que estabelecem quais caracteres
esto disponveis e sua ordem de classificao;
2. sysconfigures - variveis de ambiente configurveis;
3. syscurconfigs - variveis de ambiente configurveis;
4. sysdatabases - bancos existentes no servidor;
5. sysdevices - referncia fsica aos dispositivos e bancos do servidor;
6. syslanguages - entrada para as lnguas conhecidas pelo servidor;
7. syslocks - quais so os locks ativos;
8. syslogins - contas de usurios;
9. sysmessages - mensagens de erro do sistema;
10.sysprocesses - processos em andamento
11.sysremotelogins - contas de acesso remoto, para conexo entre dois
servidores;
12.sysservers - servidores remotos;
13.sysusages - espao em disco disponibilizado para cada banco de dados
(relaciona-se com sysdatabases e sysdevices).

MODEL
Fornece um prottipo (template) para um novo banco de dados.
Contm as tabelas de sistema que sero inseridas em cada banco de dados de
usurio. As seguintes implementaes podem ser realizadas neste database:
a) tipos definidos pelo usurio (user datatypes), regras (rules), padres
(defaults), stored procedures;
b) usurios que tero acesso a todos os bancos adicionados ao sistema
(administradores);
c) privilgios padro, notadamente aos usurios guest (guest accounts);

Banco de Dados
Autor: Nilson A. Borges

17 de 101

MICROSOFT SQL SERVER 2008


O tamanho padro deste banco de 1 Mbyte, e sua estrutura bsica
pode ser vista na figura a seguir; as 18 tabelas mostradas sero sempre
criadas em novos bancos de dados.

sysalternates

syscolumns

syscomments

sysdepends

sysindexes

syskeys

syslogs

sysobjects

sysprocedures

sysprotects

syssegments

systypes

sysusers

sysreferences

sysconstraints

sysarticles

syspublications

syssubscriptions

Este conjunto de 18 tabelas conhecido como Catlogo do Banco de


Dados, e suas funes so as seguintes (note que todas possuem o prefixo
sys):
1. sysalternates - possui uma linha para cada usurio mapeado para um
banco de dados de usurio;
2. syscolumns - possui uma linha para cada coluna em uma tabela ou
view, e para cada parmetro em uma stored procedure;
3. syscomments - possui uma ou mais linhas para cada view, regra (rule),
padro (default), trigger e stored procedure que contenha uma
declarao de definio;
4. sysdepends - uma linha para cada procedure, view, ou tabela que seja
referenciada por uma procedure, view ou trigger;
5. sysindexes - uma linha para cada clustered index, nonclustered index, e
tabela sem ndices, mais uma linha extra para cada tabela com
informaes de textos ou imagens;
6. syskeys - uma linha para cada chave estrangeira (foreign), primria
(primary) ou comum (common);
7. syslogs - armazena o transaction log;
8. sysobjects - uma linha para cada tabela (table), viso (view), stored
procedure, regra (rule), trigger, padro (default), log e objeto temporrio
(somente tempdb);

Banco de Dados
Autor: Nilson A. Borges

18 de 101

MICROSOFT SQL SERVER 2008


9. sysprocedures - uma linha para cada viso (view), stored procedure,
regra (rule), trigger, padro (default);
10.sysprotects - mantm as informaes de permisses de usurio;
11.syssegments - uma coluna para cada segmento;
12.systypes - uma linha para cada datatype definido pelo usurio ou
fornecido pelo sistema;
13.sysusers - uma linha para cada usurio permitido no database;
14.sysreferences - uma linha para cada constraint de integridade
referencial criada (PK-FK, Chave primria, chave estrangeira);
15.sysconstraints - informaes sobre cada constraint criada;
As ltimas trs tabelas so usadas para manter informaes sobre
replicao de dados.
16.sysarticles - contm a article information para cada artigo criado para
replicao;
17.syspublications - contm uma linha para cada publicao criada;
18.syssubscriptions - contm uma linha para cada subscrio de um
subscription server.

TEMPDB
Providencia um espao de armazenamento para tabelas e outras
aes temporrias ou intermedirias, tais como resultados que envolvam a
clusula GROUP BY, ORDER BY, DISTINCT e cursores (CURSORS). Possui
as seguintes caractersticas:
a) criado automaticamente no DEVICE MASTER (ateno, DEVICE e
DATABASE so coisas diferentes);
b) seu contedo apagado quando o usurio fecha a conexo, exceto
para tabelas temporrias globais;
c) quando o banco parado (stoped) seu contedo apagado
completamente;
d) seu tamanho padro de 2 Mbytes.
e) pode ser colocado em memria RAM.

Banco de Dados
Autor: Nilson A. Borges

19 de 101

MICROSOFT SQL SERVER 2008


MSDB
Providencia suporte ao servio SQL Executive Service (o qual fornece
servios de schedulle de tarefas, replicao, gerenciamento de alertas). Possui
as seguintes tabelas de sistema:
a) sysalerts - armazena informaes sobre todos os alertas definidos por
usurios;
b) sysoperators - informaes sobre os operadores;
c) sysnotifications - relaciona quais operadores devem receber quais
alertas;
d) systasks - mantm informaes sobre todas as tarefas definidas por
usurios;
e) syshistory - informaes a respeito de quando um alerta e uma tarefa
foram executados, se com sucesso ou falha, identificao do operador,
data e hora da execuo;

f) sysservermessages

mensagens

sobre

as

operaes

relacionadas ao servidor.

Banco de Dados
Autor: Nilson A. Borges

20 de 101

MICROSOFT SQL SERVER 2008

4. CRIAO DE UM DATABASE
Um database uma estrutura lgica dentro da qual so criados os
sistemas de banco de dados. Ele formado por dois tipos de arquivos. Um
dos tipos armazena dados deste sistema e o outro armazena transaes deste
sistema (incluses,alteraes e excluses realizadas em seus dados).
Os arquivos de dados ficam organizados em grupos de arquivos e o
primeiro grupo criado automaticamente no momento da criao do database
chama-se PRIMARY.

4.1. Criando um Banco de Dados com a utilizao do SQL


SERVER Management Studio

Figura 5: Tela do SQL Server Management Studio para Criao de um Banco

Banco de Dados
Autor: Nilson A. Borges

21 de 101

MICROSOFT SQL SERVER 2008

Figura 6: Tela do SQL Server Management Studio para Criao de um Banco

Abaixo esto as informaes das clausulas do comando de criao de


um Database:
Nome: o nome lgico do arquivo.
DataFile: E o arquivo fsico do Banco de Dados.
Transaction Log: E o arquivo lgico do Banco de Dados.
Filename: o nome fsico do arquivo. Deve ser especificado o seu
diretrio de criao.
Initial size: o tamanho inicial do arquivo.
Filegrowth: o valor por meio do qual o arquivo aumenta de tamanho
automaticamente.
Maximum File Size: o tamanho mximo de o Arquivo Fsico e/ ou
Lgico pode asumir

Banco de Dados
Autor: Nilson A. Borges

22 de 101

MICROSOFT SQL SERVER 2008

4.2. Criao de um Banco de Dados atravs de Scripts


Exemplo:
Criao de um Banco de Dados Chamado Bookselva
Obs: Antes da criao do Banco de Dados necessria a criao de uma
pasta na unidade C:\ em nosso exemplo a pasta chama-se BANCO
Create database Bookselva
On primary
(
name='BookSelvaBD',
filename='c:\banco\bookselva.mdf',
size= 50 MB,
maxsize= 500 MB,
filegrowth= 5 MB
)
log on
(
name='bookselvalog',
filename='c:\banco\bookselva.ldf',
size= 20 MB,
maxsize= 200 MB,
filegrowth= 2 MB
)
Para verificar se o banco foi criado corretamente
Sp_helpdb bookselva

Banco de Dados
Autor: Nilson A. Borges

23 de 101

MICROSOFT SQL SERVER 2008

4.3. CARACTERSTICA DE UM DATABASE


A Microsoft sugere como tamanho do arquivo lgico do Banco de Dados
entre 35% a 40 % do tamanho do arquivo de dados, mas este valor apenas
sugestivo pois para definio do tamanho do arquivo lgico depende de outros
fatores principalmente o nmero de transaes que este Banco ir receber.
Este valores valem somente se este Banco for Transacional.
Abaixo esto as informaes clausulas do comando de criao de um
Database:
Nome: o nome lgico do arquivo.
Filename: o nome fsico do arquivo. Deve ser especificado o seu
diretrio de criao.
Size: o tamanho limite que o arquivo pode alcanar.
Filegrowth: o valor por meio do qual o arquivo aumenta de tamanho
automaticamente.

5. Criao de Tabelas
So objetos que vo conter os dados de um sistema. Uma tabela um
objeto bidimensional formado por linhas e colunas. As colunas, ou campos, so
atributos do assunto por ela armazenada e as linhas ou registros formam um
conjunto completo de todos os atributos.
Cada coluna da sua tabela deve ter um datatype tipo de dados , que
o formato no qual os dados sero armazenados no disco. Cada tipo de dados
ocupa um espao limitado dentro do disco e pode armazenar uma deyerminada
faixa de valor. O SQL Server 2008 possuem vrios tipos de datatypes que
podem ser utilizados em colunas das tabelas ou em variveis de memria.
Possui tambm regras para garantir a integridade e a consistncia dos
dados de uma aplicao, necessrio utilizar:

Datatypes

Nulabilidade

Autonumerao

Constraints
o PK (Primary Key)
o FK (Foreign Key)
Banco de Dados

Autor: Nilson A. Borges

24 de 101

MICROSOFT SQL SERVER 2008

5.1. Datatypes do SQL Server


Datatypes so os tipos de dados que o SQL Server aceita. Eles existem
para que possamos definir o tipo de contedo de um campo de tabela ou de
uma varivel, dentre outras coisas. Lembro a voc que no estou colocando
todos os tipos, somente aqueles que usamos de verdade, no dia-a-dia.
Existem tipos que armazenam nmeros inteiros ou decimais, datas,
texto, valores binrios, alm de tipos especiais.

Confira abaixo alguns tipos de datatypes:

Char(n): quando o campo for do tipo alfanumrico e com tamanho fixo,


o n quer dizer limitao, o valor mximo de caracteres;

Varchar(n) : quando o campo for do tipo alfanumrico e com tamanho


no fixo, o n quer dizer limitao, o valor mximo de caracteres;

Int: quando o campo for numero com valor inteiro.

Decimal (p,s): quando o campo for nmeros com valores decimais, o


valor de p o numero de algarismos e o s valor dos algarismos
decimais (algarismos aps a virgula).

Money, smallmoney :quando o campo for valores monetrios.

Money (8 bytes) quando a quantidade de dinheiro muito (ex.: loteria), e


smallmoney (4 bytes) quando a quantidade de dinheiro pequena.
Datetime e SmallDatetime:quando o campo for do tipo data ou hora.
Datetime (8 bytes) utilizado no intervalo de 01/01/1753 a 31/12/9999
Smalltime (4 bytes) utilizado no intervalo de 01/01/1900 a 06/06/2079

Bit :determina se o valor verdadeiro, falso ou nulo.

Banco de Dados
Autor: Nilson A. Borges

25 de 101

MICROSOFT SQL SERVER 2008

TIPOS NUMRICOS
NOME

TAMANHO
(BYTES)

MENOR
VALOR

MAIOR
VALOR

ARMAZENA

BIGINT

-263

263 - 1

INTEIRO

31

INT

-2

-2

TINYINT

-1

INTEIRO

15

-1

INTEIRO

15

SMALLINT

31

255

INTEIRO

DECIMAL(C,
D)

VARIVEL

-1038

1038 - 1

DECIMAL EXATO, ONDE C INDICA


NMERO DE POSIES E D O NMERO
DE CASAS DECIMAIS

NUMERIC(C,
D)

VARIVEL

-1038

1038 - 1

DECIMAL EXATO, ONDE C INDICA


NMERO DE POSIES E D O NMERO
DE CASAS DECIMAIS

MONEY

-263

263 - 1

MONETRIO - EQUIVALE A UM
DECIMAL COM 8 CASAS DECIMAIS

SMALLMONEY

-231

231 - 1

MONETRIO - EQUIVALE A UM
DECIMAL COM 4 CASAS DECIMAIS

FLOAT(D)

4 OU 8

-1.79 X
10308

1.79 X
10308

PONTO FLUTUANTE, ONDE D INDICA O


NMERO MXIMO DE CASAS
DECIMAIS, ENTRE 0 E 53

REAL

-3.4 X
1038

3.4 X 1038

PONTO FLUTUANTE - EQUIVALENTE AO


FLOAT(24)

TIPOS TEXTO
NOME

TABELA

LIMITE
(CARACTERES)

CHAR(N)

ASCII

8000

EXATAMENTE N

CARACTERES, ONDE N
INDICA O TAMANHO DO
CAMPO

VARCHAR(N)

ASCII

8000

AT N

CARACTERES, ONDE N
INDICA O TAMANHO DO
CAMPO

NCHAR(N)

UNICODE

4000

EXATAMENTE N

CARACTERES, ONDE N
INDICA O TAMANHO DO
CAMPO

NVARCHAR(N) UNICODE

4000

AT N

CARACTERES, ONDE N
INDICA O TAMANHO DO
CAMPO

231 - 1

AT 231 - 1

CARACTERES

AT 231 - 1

CARACTERES

TEXT
NTEXT

ASCII
UNICODE

31

-1

TAMANHO
(CARACTERES)

ARMAZENA

TIPOS DATA
NOME

TAMANHO
(BYTES)

MENOR
VALOR

MAIOR
VALOR

PRECISO

ARMAZENA

DATETIME

1753-01-01
00:00:00.000

9999-12-31
23:59:59.997

3.33 ms

DATA/HORA

2079-06-06
23:59:00

1 MINUTO, SENDO QUE


AT 29.998ms
ARREDONDA PARA
MENOS E ACIMA DISSO
PARA O PROXIMO
MINUTO.

DATA/HORA

SMALLDATETIME

1900-01-01
00:00:00

Banco de Dados
Autor: Nilson A. Borges

26 de 101

MICROSOFT SQL SERVER 2008

Nulabilidade
Nulabilidade: Significa se o campo declarado pode ser ou no nulo.
Para fazer tal declarao necessrio definir o campo com a clausula:
o Not null (no permite valor nulo,preenchimento obrigatrio do
campo)
o Null (permite valor nulo, preenchimento no obrigatrio do
campo)

Constraints: Integridade
Primary Key(Chave Primria):
Fazendo parte das regras de modelagem de dados relacional, uma
chave primria uma regra que deve sempre ser colocada em uma coluna ou
um conjunto de colunas de uma tabela, para que o sistema no aceite dados
repetitivos nesses campos, tornando-se possvel a identificao da unicidade
de cada registro de uma tabela.
.
Exemplo:
Constraint PK_Cliente Primary Key (Cd_Cli)

Detalhes sobre o uso das Constraints Primary Key(PK)

Em uma tabela possvel ter apenas uma constraint primary key

A constraint primary key pode ser composta de mais de uma coluna,


inclusive de datatypes diferentes

As constraints primary key no aceitam valores repetidos, e para manter


a unicidade dos dados, O SQL SERVER 2008 cria, nessas colunas,
ndices nicos.

As colunas que fazem parte da constraint primary key no podem


receber valores nulos.

Banco de Dados
Autor: Nilson A. Borges

27 de 101

MICROSOFT SQL SERVER 2008


Foreign Key(Chave Estrangeira):
As colunas que estiverem relacionando duas tabelas sero chamadas de
chave estrangeira. Uma coluna s pode ser chave estrangeira se na tabela
com a qual est se relacionando essa coluna for chave primria. Ou seja,
suponha que na tabela Nota Fiscal relaciona-se com a tabela Cliente por meio
da coluna Cod_Cli . Na tabela Nota Fiscal a coluna Cod_Cli s poder ser
chave estrangeira se na tabela Cliente a coluna Cod_Cli for chave primria.

Exemplo:
Constraint FK_NotaFiscal Foreign Key(Cd_Cli)
References Cliente(Cod_Cli)
On delete cascade
Detalhes sobre o uso das Constraints Foreign Key(FK)

Em uma tabela possvel ter vrias uma constraint foreign key

A constraint foreign key pode ser composta de mais de uma coluna,


inclusive de datatypes diferentes

Se a chave primria da referida chave estrangeira for composta, a chave


estrangeira tambm deve ser composta das mesmas colunas, na
mesma sequncia de criao.

As constraints foreign key aceitam valores repetidos.

O SQL SERVER 2008 no cria ndice automaticamente nas colunas que


formam chave estrangeira

As colunas que fazem parte da constraint foreign key podem receber


valores nulos.

As constraints foreign key podem referenciar apenas tabelas do mesmo


Database

A instruo on delete cascade permite a excluso do dado se o mesmo


estiver relacionado em outra tabela, excluir o registro na tabela
realcionada.

Banco de Dados
Autor: Nilson A. Borges

28 de 101

MICROSOFT SQL SERVER 2008


AutoNumerao
Identidade para um banco de dados a forma de identificar cada linha
de uma tabela como nica.
Para manter a integridade e a consistncia dos dados, necessrio ter
uma forma de identific-los como nicos dentro de uma tabela. E para tanto,
utilizam-se a chave primria. As chaves primrias normalmente so colocadas
em uma coluna que numera os registros dentro de uma tabela.
A coluna Cod_Cli da tabela Cliente deve receber valores nicos.
Para solucionar a questo sobre valores nicos nos registros o SQL
SERVER 2008 disponibiliza uma propriedade do campo como IDENTITY, onde
far a autonumerao na coluna onde for especificada.
Para criar uma tabela com a propriedade identity, observe o exemplo
apresentado em seguida:
Use bookselva
Create table Email
(
Cod_email

int

identity

not null,

Descricao_email

varchar(40)

not null,

provedor_email

varchar(40)

not null,

Cod_Cli

int

not null,

Constraint PK_email
Primary Key(Cod_email)
)

Para verificar se a tabela foi criado corretamente


Select * from email
Ou
Comando para verificar a estruturas das tabelas
Sp_help email

Banco de Dados
Autor: Nilson A. Borges

29 de 101

MICROSOFT SQL SERVER 2008

5.2. Criao de Tabelas no Banco de Dados criado


anteriormente com a utilizao de scripts
Use bookselva
Create table Cliente
(
Cod_Cli

int

identity

not null,

Nome_Cli

varchar(40)

not null,

End_Cli

varchar(30)

not null,

Bai_Cli

varchar(20)

not null,

Cid_Cli

varchar(20)

not null,

Uf_Cli

char(3)

not null,

Tel_Cli

varchar(15)

null,

Constraint PK_Cliente
Primary Key(Cod_Cli)
)
Create Table NotaFiscal
(
Num_Nota

int identity

not null,

Cod_Cli

int

not null,

Serie_Nota

varchar(10)

not null,

Emissao_Nota

smalldatetime

null,

Vtot_Nota

SmallMoney

not null,

Constraint PK_NotaFiscal
Primary Key(Num_Nota),
Constraint FK_Cliente
Foreign Key(Cod_Cli)
References cliente(Cod_Cli)
On delete cascade
)

Banco de Dados
Autor: Nilson A. Borges

30 de 101

MICROSOFT SQL SERVER 2008


Create Table Produto
(
Cod_Prod

int

identity

not null,

Nome_Prod

varchar(50)

not null,

Qtd_Estoque

int

not null,

Val_Prod

decimal(8,2)

not null,

Constraint PK_Prod
Primary Key(Cod_Prod)
)

Create Table ItensNota


(
Num_Nota

int

not null,

Cod_Prod

int

not null,

Qtd_Vend

int

not null,

Val_Vend

decimal(8,2)

not null,

Constraint PK_ItensNota
Primary Key(Num_Nota,Cod_Prod),
Constraint FK_Itens1Nota
Foreign Key(Num_Nota)
References NotaFiscal(Num_Nota)
On delete cascade ,
Constraint FK_Itens2Nota
Foreign Key(Cod_Prod)
References Produto(Cod_Prod)
On delete cascade
)

Banco de Dados
Autor: Nilson A. Borges

31 de 101

MICROSOFT SQL SERVER 2008

5.3. Alterando a estrutura de uma tabela


Existem outras alteraes que pode-se realizar na estrutura das tabelas,
como por exemplo, acrescentar outras colunas a uma determinada tabela,
retirar colunas e alguns casos pode at alterar certas caractersticas das
colunas de uma tabela. Essas alteraes feitas na estrutura de uma tabela
podem ser realizadas mesmo que a tabela esteja com dados.
Para adicionar um novo campo em uma tabela
Alter table Cliente
Add Sexo_cli char(1) not null

Para definir como chave estrangeira um campo j existente

Alter table Email


Add constraint FK_Email
Foreign Key(Cod_Cli)
References cliente(Cod_Cli)

Para alterar um datatype de campo em uma tabela


Alter table Cliente
Alter column Sexo_cli varchar(10) null

Para retirar um campo em uma tabela


Alter table Cliente
Drop column Sexo_cli

Banco de Dados
Autor: Nilson A. Borges

32 de 101

MICROSOFT SQL SERVER 2008

5.4. Criando um Diagrama


O SQL SERVER Management Studio permite que voc crie um
diagrama das tabelas para verificar os relacionamentos das tabelas isso se
houver relacionamentos. Devido a este fato diagramas s podero ser criados,
aps a criao de todas as tabelas com seus devidos relacionamentos.
Para criar um Diagrama com o SQL SERVER Management Studio faa
a seguintes operaes:
Expanda seu database no exemplo o BookSelva
clique com o boto direito sobre a pasta Database Diagrams e escolha
a opo New Database Diagram como mostra a figura abaixo:

Figura 7: Tela do SQL Server Management Studio criando um Diagrama

Banco de Dados
Autor: Nilson A. Borges

33 de 101

MICROSOFT SQL SERVER 2008


Em seguida aparecer a primeira tela do onde voc dever escolhar as tabelas
que iro compor seu diagrama.
Selecionar as tabelas Cliente, Itens, NotaFiscal e Produto.

Figura 8: Tela do SQL Server Management Studio criando um Diagrama

Depois clicar no boto ADD logo em seguida ir surgir a tela a seguir


com o relacionamento das tabelas.
Pronto o diagrama das tabelas.

Figura 9: Tela do SQL Server Management Studio criando um Diagrama

Banco de Dados
Autor: Nilson A. Borges

34 de 101

MICROSOFT SQL SERVER 2008

6. INSERT (Insere registro)


Definio: O comando INSERT insere um novo registro em uma tabela
Sintaxe:
INSERT INTO <tabela> [<campos>] VALUES <valores>
Exemplos:
Adotando-se que a ordem dos campos da tabela cliente seja (Cod_Cli,
Nome_Cli, End_Cli, Bai_Cli, Cid_Cli, Uf_Cli, Tel_Cli) temos:
/*insere os valores (1,Nilson Borges, Av.Paulista,929, Cerqueira Csar, So
Paulo, SP, 3285-0202) na tabela CLIENTES */
INSERT

INTO

CLIENTE

VALUES

(Nilson

Borges,

Av.Paulista,929, Cerqueira Csar, So Paulo, SP,


3285-0202)
ou
INSERT INTO CLIENTE ( Nome_Cli, End_Cli, Bai_Cli, Cid_Cli,
Uf_Cli,Tel_Cli)
VALUES(Nilson

Borges,

Av.Paulista,929,

Cerqueira

Csar, So Paulo, SP, 3285-0202)


OBS: O valor cod_cli no necessrio inserir pois foi
definido

como

identity

que

autonumerao

seu

preenchimento automtico

/*insere

os

valores

(1,WEP2525,2004/08/12,250.89)

na

tabela

NOTAFISCAL*/
INSERT

INTO

NOTAFISCAL

VALUES

(1,

WEP2525,

2004/08/12,250.89)
Ou
INSERT INTO NOTAFISCAL (Cod_Cli, Serie_Nota, Emissao_Nota,
Vtot_Nota)
VALUES (1, WEP2525, 2004/08/12,250.89)
Banco de Dados
Autor: Nilson A. Borges

35 de 101

MICROSOFT SQL SERVER 2008

7. UPDATE (Altera valor do registro)


Definio: O comando UPDATE altera campos de um ou vrios registros
de uma tabela.
Sintaxe: UPDATE <tabela> SET <campo> = <expresso> [WHERE
<condio>];
Exemplos:
/* atualiza o campo NOME_CLI para Juliana Costa do registro da
tabela CLIENTE para o Cd_Cli igual a 1 */
UPDATE CLIENTE SET Nome_Cli = 'Juliana Costa'
WHERE Cod_Cli = 1

/* atualiza o campo valor total para 125.75 do registros da tabela


NOTAFISCAL onde o campo Emisso_nota for maior que
10/08/2004 */
UPDATE NOTAFISCAL SET Vtot_Nota = 125.75
WHERE Emissao_nota > 2004/08/10

/* atualiza o campo valor total da tabela NOTAFISCAL com um


acrscimo de 12% em todos os campos onde a emisso for
menor do que 20/08/2004
UPDATE NOTAFISCAL SET Vtot_Nota = Vtot_Nota*1.12
WHERE Emissao_nota < 2004/08/20

Banco de Dados
Autor: Nilson A. Borges

36 de 101

MICROSOFT SQL SERVER 2008

Operadores de Comparao

Operador

Descrio

Igual a

<>

Diferente

>

Maior que

>=

Maior ou igual a

<

Menor que

<=

Menor ou igual a

Exerccio
1) Atualize o campo Cid_Cli da tabela Cliente para Santo Andr para os registros dos
clientes do campo UF_Cli igual a SP.
2) Atualize o campo Cod_Cli da tabela NotaFiscal para 3 para os registros das Notas
Fiscais com valor total abaixo de 130.00.
3) Atualiza o campo VTot_Nota com um desconto de 23% para o registros das Notas
Fiscais com valor total diferente de 581.20

Banco de Dados
Autor: Nilson A. Borges

37 de 101

MICROSOFT SQL SERVER 2008

8. DELETE (Excluso de registros)


Definio: O comando DELETE exclui um ou mais registros de uma tabela

Sintaxe: DELETE [FROM] <tabela> [WHERE <condio>];

Exemplo:

/* exclui todos os registros da tabela NotaFiscal onde o campo


Cod_Cli igual a 1 */
DELETE FROM NOTAFISCAL WHERE Cod_Cli = 1

/* exclui todos os registros da tabela CLIENTE onde o campo


Nome_Cli igual a Joo Pedro*/
DELETE FROM CLIENTE WHERE Nome_Cli = Joo Pedro

Exerccios
1) Excluir todas as NotasFiscais onde a Data de Emisso superior a 15/08/2004

2) Excluir todas as NotasFiscais onde o valor total seja menor ou igual a 4520.21
3) Excluir todos os clientes onde moram no Estado de Minas Gerais.

4) Excluir todos os clientes onde moram na Cidade de So Roque.

5) Excluir todas as NotasFiscais que menos a do Cliente de Cdigo igual a 2.

Banco de Dados
Autor: Nilson A. Borges

38 de 101

MICROSOFT SQL SERVER 2008

9. APRESENTANDO O SISTEMA INFONEW


O objetivo deste sistema fictcio criar um ambiente OLTP(On Line Transaction
Process) para que vocs coloquem em prtica os tpicos que sero vistos nos
prximos captulos desta apostila. O Sistema INFONEW deve gerenciar as
operaes comerciais de uma suposta empresa.

9.1 Os objetivos gerais do INFONEW so:


Parte 1: Manter dados a respeito dos Clientes:
Parte 2: Realizar anlise de crdito de cada Cliente
Parte 3: Manter dados a respeito dos produtos a serem vendidos
Parte 4: Manter e gerenciar os pedidos de compra feitos por esses clientes.
Parte 5: Manter dados a respeito dos Funcionrios

Parte 1 Manter Dados a Respeito dos Clientes da Empresa


Manter dados a respeito dos clientes envolve armazenar todas as
informaes a respeito de cada cliente para que ele possa ser encontrado
facilmente num momento de necessidade.
Nessa empresa, um cliente pode possuir vrios tipos de endereo, por
exemplo, endereo residencial, de faturamento, de entrega, de cobrana, etc...,
e o sistema tem que ser capaz de armazenar qualquer quantidade e qualquer
tipo de endereo para cada cliente individualmente. Cada endereo deve ser o
mais completo possvel, contendo alm do nome da rua, do bairro, nmero do
prdio, o nome da cidade e do estado dessa cidade.
necessrio saber tambm dados a respeito do cnjuge de cada cliente
(se ele tiver um cnjuge), pois no clculo do crdito para cada clientes, a renda
do cnjuge pode ser considerada.
Banco de Dados
Autor: Nilson A. Borges

39 de 101

MICROSOFT SQL SERVER 2008


necessrio tambm que o sistema consiga armazenar qualquer
quantidade de telefone que o cliente possa informar e qualquer quantidade de
e-mails.
Assim que um cliente cadastrado no sistema, deve ser atribudo a ele
um tipo de cliente, ou seja, uma classificao de acordo com a sua renda
mensal.
Parte 2 Anlise do Credito do Cliente
Inicialmente, quando um cliente cadastrado no sistema, atribudo a
ele um tipo de cliente, ou seja, uma classificao de acordo com a sua renda.
O clculo do limite de crdito deve ser uma aplicao que poder ser executada
periodicamente, para todos os clientes de uma s vez ou para um cliente
especifico. Esse clculo deve levar em considerao o tipo do cliente, a renda
do cnjuge, a soma total de pedidos realizados no ano corrente e o atraso
mdio nos pagamentos das parcelas.
Esse valor que limita o crdito do cliente deve ser levado em
considerao sempre antes de realizar uma venda para cada cliente.
Parte 3 Manter Dados a Respeito dos Produtos a Serem Vendidos
Cada produto disponvel para venda deve ser classificado por um tipo para
que seja possvel realizar totalizaes em estoque, produzindo dados
gerenciais. Por exemplo, o sistema deve ser capaz de fornecer informaes
como:
Quantidade de cada produto vendido num determinado perodo.
Quantidade de um determinado tipo de produto vendida em um
determinado perodo.
Tipo de produto vendido em cada regio de cada cidade.
Tipo de produto vendido em cada regio de cada estado.
Controle de quantidade em estoque de cada produto.
Controle de quantidade em estoque de cada tipo de produto.
Tipos de produto que so mais vendidos.
Tipos de produto menos vendidos.

Banco de Dados
Autor: Nilson A. Borges

40 de 101

MICROSOFT SQL SERVER 2008


Parte 4 Manter e Gerenciar os Pedidos de Compra Feitos pelos
Clientes
Cada pedido de compra pode ser pago vista ou ser parcelado.
O sistema deve ser capaz de fornecer informaes a respeito de cada
pedido de um determinado usurio. Essas informaes so:
Data e valor do primeiro pedido do cliente.
Parcelas em atraso de um pedido.
Valor original de cada parcela.
Valor de cada parcela com juros e multa.
O sistema deve ser capaz de informar os produtos que cada cliente j
comprou, e os produtos que cada um nunca comprou.
A cada venda realizada o sistema deve ser capaz de calcular o valor
total de cada pedido e dar baixa em estoque a cada produto vendido.
O sistema deve aceitar devoluo de produtos comprados pelos clientes
se o referido pedido estiver em aberto. E essa devoluo deve recolocar o
produto em estoque e retirar o valor do pedido a ser pago pelo cliente.
Parte 5 Manter Dados a Respeito dos Funcionrios
O sistema deve ser capaz de armazenar dados a respeito dos
funcionrios e dos dependentes que cada funcionrio possui.
Cada funcionrio deve receber, alem de um salrio fixo, bnus mensais
de acordo com os produtos que ele vender.
O desempenho de cada funcionrio ser medido por pontos que ele
recebe mensalmente. De acordo com essa pontuao, seu bnus pode ser
acrescido de determinados valores.
Todas as vezes que o salrio fixo de cada funcionrio for alterado, o
sistema deve armazenar no histrico o salrio anterior, o atual e a data da
alterao.

Banco de Dados
Autor: Nilson A. Borges

41 de 101

MICROSOFT SQL SERVER 2008

9.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA


INFONEW

Banco de Dados
Autor: Nilson A. Borges

42 de 101

MICROSOFT SQL SERVER 2008

10. SELECT (Consulta)


Descrio: Este comando faz a seleo dos dados de uma ou mais
tabelas.

Sintaxe: SELECT <campo> FROM <tabela>

Exemplos:
SELECT COD_CLI, NOME_CLI,SEXO_CLI FROM CLIENTE
SELECT COD_CLI, NUM_LANC, DATA_CREDCLI, CRED_CLI
FROM CREDITO
SELECT

COD_PROD,

NOME_PROD,

VAL_UNITPROD

FROM

PRODUTO
SELECT

COD_FUNC,

NOME_FUNC,

SAL_FUNC

FROM

FUNCIONARIO

Para listar todos os campos da tabela, utilizamos o operador "*"


(asterisco)
SELECT * FROM CLIENTE
SELECT * FROM CREDITO
SELECT * FROM PRODUTO
SELECT * FROM FUNCIONARIO

Banco de Dados
Autor: Nilson A. Borges

43 de 101

MICROSOFT SQL SERVER 2008

10.1 ORDER BY (Ordem de retorno)


Definio: A clusula ORDER BY determina a ordem de apresentao do
resultado de uma pesquisa de forma ascendente ou descendente.

Sintaxe:
SELECT <campo> FROM <tabela> [WHERE <condio>]
ORDER BY <campo_ordenacao> [ASC/DESC]

Exemplos:
/* seleciona todos os registros da tabela CLIENTES ordenando o
retorno pelo campo CODIGO em ordem ascendente */
SELECT * FROM CLIENTE ORDER BY COD_CLI ASC

/* seleciona todos os registros da tabela CLIENTES ordenando o


retorno primeiro pelo campo CODIGO em ordem descendente e
depois pelo campo NOME em ordem ascendente */
SELECT * FROM CLIENTES ORDER BY COD_CLI DESC,
NOME_CLI ASC

Banco de Dados
Autor: Nilson A. Borges

44 de 101

MICROSOFT SQL SERVER 2008

10.2 ALIAS (Apelido)


Definio: Literal que identifica um campo, uma funo ou uma tabela

Sintaxe:

SELECT (<campo> ou <funo>) <alias do retorno>


FROM <tabela> <alias da tabela>

Exemplos:
/* seleciona o valor do campo NOME da tabela CLIENTES */
SELECT NOME_CLI AS "NOME DO CLIENTE"
FROM CLIENTE
Observe que a coluna Nome_Cli passou a chamar Nome do Cliente

/* listar o cdigo do cliente, nome do cliente ,renda do CLIENTE e


renda do CLIENTE com acrscimo de 37% */
SELECT COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37
FROM CLIENTE
Observe que est mostrando uma coluna com nome (No column name)
para no aparecer est coluna necessrio criar um alias para a coluna
conforme cdigo abaixo.

SELECT

COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37

AS "RENDA COM AUMENTO"


FROM CLIENTE

Banco de Dados
Autor: Nilson A. Borges

45 de 101

MICROSOFT SQL SERVER 2008

10.3 WHERE (Restries)


Descrio: Com esta clusula possvel fazermos restrio dos registros
a serem manipulados, como veremos posteriormente ela tambm poder
ser usados para outros comandos do SQL.

Sintaxe: SELECT <campo> FROM <tabela> WHERE <condio>

Exemplo:
/*sero listados todos os registro da tabela CLIENTES onde o
campo Cod_Cli for igual a 1 */
SELECT * FROM CLIENTE WHERE COD_CLI = 1

/*sero listados todos os registros da tabela PEDIDO onde o


campo Data_Ped for superior a 01/02/2001 E cod_sta= 1*/
SELECT * FROM PEDIDO WHERE DATA_PED > 2001/02/01
AND COD_STA=1

/*sero listados todos os registros da tabela CLIENTE onde o


campo Nome_Cli for igual Daniel Souza OU Clientes do sexo
Feminino */
SELECT * FROM CLIENTE WHERE NOME_CLI = 'DANIEL
SOUZA' OR SEXO_CLI=F

Obs: No esquea que na clausula where utiliza-se os operadores de


comparao: maior, menor, igual, diferente, maior ou igual e menor ou
igual.

Banco de Dados
Autor: Nilson A. Borges

46 de 101

MICROSOFT SQL SERVER 2008

10.4 BETWEEN (Condio com uma faixa de valores)


Definio: O operador BETWEEN determina a faixa de valores aceito de
uma pesquisa. Este comando substitui os operadores >= e <=.

Sintaxe: SELECT <campo> FROM <tabela>


WHERE <campo> BETWEEN <valor_inicial> AND <valor_final>

Exemplos:
/* seleciona todos os registros da tabela CLIENTE onde o campo
Cod_Cli estiver entre 1 e 5 */
SELECT * FROM CLIENTE
WHERE COD_CLI BETWEEN 1 AND 5

/* seleciona todos os registros da tabela PEDIDO onde o campo


Data_Ped estiver entre 05/10/2003 a 02/10/2004 */
SELECT * FROM PEDIDO
WHERE

DATA_PED

BETWEEN

'2003/10/05'

AND

2004/10/02'

/*seleciona todos os registros da tabela PRODUTO onde o campo


Val_UnitProd estiver entre 500 e 1000 */
SELECT * FROM PRODUTO WHERE VAL_UNITPROD BETWEEN
500 AND 1000

Banco de Dados
Autor: Nilson A. Borges

47 de 101

MICROSOFT SQL SERVER 2008

10.5 LIKE (Comparao com uma parte de uma literal)


Definio: O operador LIKE faz a comparao somente com uma parte de
uma literal, desconsidera tudo que possa vir antes ou depois do valor
passado. O caracter % significa qual parte a ser desconsiderada

Sintaxe: SELECT <campo> FROM <tabela>


WHERE <campo> LIKE <[%]parte_literal[%]>
Exemplos:
/* seleciona todos os registros da tabela CLIENTES onde o campo
Nome_Cli terminar com a literal SOUZA */
SELECT * FROM CLIENTE
WHERE NOME_CLI LIKE %SOUZA

/* seleciona todos os registros da tabela CLIENTE onde o campo


Nome_Cli comear com a letra A */
SELECT * FROM CLIENTE
WHERE NOME_CLI LIKE A%

/* seleciona todos os registros da tabela CLIENTE onde o campo


Nome_Cli no possuir o sobrenome OLIVEIRA dentro do seu contedo */
SELECT

FROM

CLIENTE

WHERE

NOME_CLI

NOT

LIKE %OLIVEIRA%

/* seleciona todos os registros da tabela CLIENTE onde o campo


Nome_Cli possui a primeira letra entre A ou E ou Z */
SELECT * FROM CLIENTE WHERE NOME_CLI
LIKE [A,E,Z]%

/* seleciona todos os registros da tabela CLIENTE onde o campo


Nome_Cli possui a primeira letra entre A a D */
SELECT * FROM CLIENTE WHERE NOME_CLI
LIKE [A-D]%

Banco de Dados
Autor: Nilson A. Borges

48 de 101

MICROSOFT SQL SERVER 2008

10.6 DISTINCT (Valores nicos)


Definio:

operador

DISTINCT

elimina

todas

as

replicaes,

significando que somente dados distintos sero apresentados como


resultado de uma pesquisa.

Sintaxe:

SELECT

DISTINCT

<campo>

FROM <tabela> [WHERE

<condio>]

Exemplos:
/* seleciona todos os valores do campo Cdigo do Cliente, valor
do pedido da tabela PEDIDO sem repetio dos cdigos do cliente
*/
SELECT DISTINCT COD_CLI,VAL_PED FROM PEDIDO

/* seleciona todos os valores do campo data do pedido , valor do


pedido, da tabela Pedido sem repetio da data do pedido*/
SELECT DISTINCT DATA_PED,VAL_PED FROM PEDIDO

Banco de Dados
Autor: Nilson A. Borges

49 de 101

MICROSOFT SQL SERVER 2008

11. FUNES DE AGRUPAMENTO


COUNT (CONTAR)
SUM (SOMAR)
AVG (MDIA)
MAX (MXIMO)
MIN (MNIMO)

11.1 COUNT (Contador de registros)


Definio: A funo COUNT retorna a quantidade de registros
correspondentes a uma pesquisa.

Sintaxe: SELECT COUNT(*) FROM <tabela> [WHERE <condio>]

Exemplos:

/* seleciona a quantidade de registros da tabela Clientes */


SELECT COUNT(*) AS TOTAL CLIENTES FROM CLIENTE

/* seleciona a quantidade de registros da tabela pedidos onde o


campo data_ped estiver entre 02/12/2008 a 03/08/2010 */
SELECT COUNT(*)AS QUANTIDADE PEDIDOS FROM PEDIDO
WHERE

DATA_PED

BETWEEN

2008/12/02

AND

2010/08/03

/* seleciona a quantidade de telefones que cada cliente possui */


SELECT COD_CLI,COUNT(COD_CLI) AS TOTAL TELEFONE
FROM FONE
GROUP BY COD_CLI

Banco de Dados
Autor: Nilson A. Borges

50 de 101

MICROSOFT SQL SERVER 2008

11.1.1 GROUP BY (Agrupamento de dados)

Definio: A clusula GROUP BY agrupa todas as linhas de retorno de


uma pesquisa que possurem o valor de seus campos iguais.

Sintaxe
SELECT (<campo_agrupamento> e/ou <funcao_agrupamento>)
FROM <tabela> [WHERE <condio>]
GROUP BY <campo_agrupamento>

Exemplo:
/* seleciona a quantidade de telefones que cada cliente possui
agrupado por cliente */
SELECT COD_CLI,COUNT(COD_CLI) AS TOTAL TELEFONE
FROM FONE
GROUP BY COD_CLI

/* seleciona a quantidade de emails que cada cliente possui


agrupado por cliente */
SELECT

COD_CLI,COUNT(COD_CLI)

AS

TOTAL

EMAIL

FROM EMAIL
GROUP BY COD_CLI

/* seleciona a quantidade de parcelas que cada pedido possui


agrupado pedido */
SELECT NUM_PED, COUNT(NUM_PED) AS QUANT.PARCELAS
FROM PARCELA
GROUP BY NUM_PED

Banco de Dados
Autor: Nilson A. Borges

51 de 101

MICROSOFT SQL SERVER 2008

11.2 SUM (Somatria de valores)


Definio: A funo SUM faz a somatria dos valores de um campo.
Sintaxe: SELECT SUM(<campo>) FROM <tabela> [WHERE <condio>]
Exemplos:

/* seleciona a somatria dos valores do campo Renda_Cli da


tabela Clientes */
SELECT COD_CLI, SUM(RENDA_CLI) AS RENDA CLIENTE
FROM CLIENTE
GROUP BY COD_CLI

/* seleciona a somatria dos valores do campo Val_UnitProd da


tabela PRODUTO*/
SELECT COD_PROD, SUM(VAL_UNITPROD)AS VALOR TOTAL
PRODUTOS

FROM PRODUTO

GROUP BY COD_PROD

Banco de Dados
Autor: Nilson A. Borges

52 de 101

MICROSOFT SQL SERVER 2008

11.3 AVG (Mdia de valores)

Definio: A funo AVG faz a mdia dos valores de um campo.

Sintaxe: SELECT AVG(<campo>) FROM <tabela> [WHERE <condio>]

Exemplos:

/* seleciona a mdia dos valores do campo Renda_Cli da tabela


Clientes */
SELECT COD_CLI, AVG(RENDA_CLI) AS RENDA CLIENTE
FROM CLIENTE
GROUP BY COD_CLI

/* seleciona a mdia dos valores do campo Val_UnitProd da


tabela PRODUTO*/
SELECT COD_PROD, AVG(VAL_UNITPROD)AS VALOR TOTAL
PRODUTOS

FROM PRODUTO

GROUP BY COD_PROD

Banco de Dados
Autor: Nilson A. Borges

53 de 101

MICROSOFT SQL SERVER 2008

11.4 MIN, MAX (Menor e maior valor)


Definio: As funes MIN e MAX retornam respectivamente o menor e o
maior valor encontrado para um campo.

Sintaxe: SELECT MIN(<campo>) FROM <tabela> [WHERE <condio>]


SELECT MAX(<campo>) FROM <tabela> [WHERE <condio>]

Exemplos:

/* seleciona o menor do valor do campo Renda_Cli da tabela


Clientes */
SELECT

MIN(RENDA_CLI)

AS

MENOR

RENDA

FROM

CLIENTE

/* seleciona o maior do valor do campo Val_UnitProd da tabela


PRODUTO*/
SELECT MAX(VAL_UNITPROD) AS MAIOR PRODUTO

FROM

PRODUTO

Banco de Dados
Autor: Nilson A. Borges

54 de 101

MICROSOFT SQL SERVER 2008

12. HAVING (condio do agrupamento)


Definio: A clusula HAVING faz com que o resultado da pesquisa seja
feito sob determinada condio. A condio HAVING est para a clusula
GROUP BY da mesma forma que a clusula WHERE est para o
comando SELECT
Sintaxe:
SELECT (<campo> ou <funo>) FROM <tabela>
[WHERE <condio1>]
GROUP BY <campo>
HAVING <condio2>
Exemplos:
/* seleciona o campo Cdigo Funcionrio e a quantidade de
registros da tabela Dependentes agrupados pelo campo Cod_Func
onde o valor do campo Quantidade de Dependentes deve possuir
mais de 1 ocorrncia */
SELECT COD_FUNC, COUNT(COD_FUNC) AS TOTAL
FROM DEPENDENTE
GROUP BY COD_FUNC HAVING COUNT(COD_FUNC) > 1

/* seleciona o campo RENDA, o menor e o maior valor do campo


RENDA da tabela CLIENTE agrupados pelo campo CODIGO onde
o valor do campo CODIGO deve possuir mdia superior a 450 */
SELECT

COD_CLI,

MIN(RENDA_CLI)

MAX(RENDA_CLI) AS MXIMO

AS

MINIMO,

FROM CLIENTE GROUP BY

COD_CLI
HAVING AVG(RENDA_CLI) > 450

Banco de Dados
Autor: Nilson A. Borges

55 de 101

MICROSOFT SQL SERVER 2008

13. IN (Condio com valores fixos)


Definio: O operador IN determina os valores fixos aceitos de uma
pesquisa.
Sintaxe:

SELECT <campo> FROM <tabela>


WHERE <campo> IN (<lista_de_valores>)
Exemplos:

/* seleciona todos os registros da tabela CLIENTE onde o campo


CODIGO for igual a 1 ou 2 ou 3 ou 4 */
SELECT * FROM CLIENTE
WHERE COD_CLI IN (1,2,3,4)

/* seleciona todos os registros da tabela PEDIDO onde o campo


NUMERO for igual a 45 ou 50 */
SELECT * FROM PEDIDO
WHERE NUM_PED IN (45,50)

/* seleciona todos os registros da tabela TIPOCLI onde o campo


CODIGO for igual a 1 ou 3 ou 5 ou 6*/
SELECT * FROM TIPOCLI
WHERE COD_TIPOCLI IN (1, 3, 5, 6)

/* seleciona todos os registros da tabela TIPOCLI onde o campo


NOME for igual a OURO
SELECT * FROM TIPOCLI
WHERE NOME_TIPOCLI IN (OURO)

Banco de Dados
Autor: Nilson A. Borges

56 de 101

MICROSOFT SQL SERVER 2008

14. SUBQUERIES (Pesquisa dentro de um comando)


Definio: O conceito de SUBQUERIES possibilita criar um consulta
(comando SELECT) dentro de um outro comando(SELECT, INSERT,
UPDATE, DELETE).

Sintaxe:
No existe uma sintaxe fixa, mas existem algumas restries:
- deve estar sempre entre parnteses;
- no pode ser usada na clusula ORDER BY;
- a subquery no pode conter ORDER BY, COMPUTE ou SELECT
INTO
- a subquery no pode, em hiptese alguma, retornar mais de uma
coluna no caso de comparao por valores ou listas;
- a subquery deve usar a funo EXISTS se fizer um SELECT *;
- no pode usar na lista de colunas do SELECT uma coluna do tipo
IMAGE ou TEXT.

Exemplos:

/* seleciona todos os registros da tabela CLIENTE onde o campo


RENDA for maior ou igual ao maior valor da mdia do campo
RENDA */
SELECT * FROM CLIENTE
WHERE RENDA_CLI > =

(SELECT AVG(RENDA_CLI)

FROM CLIENTE )

/* seleciona todos os registros da tabela PRODUTOS o campo


VALOR UNITARIO maior do o menor valor do campo VALOR
DO PEDIDO */
SELECT * FROM PRODUTO WHERE VAL_UNITPROD >
(SELECT MIN(VAL_PED) FROM PEDIDO)
Banco de Dados
Autor: Nilson A. Borges

57 de 101

MICROSOFT SQL SERVER 2008


/* seleciona todos os registros da tabela CLIENTE onde exibe os
clientes de no possuem telefone */
SELECT * FROM CLIENTE
WHERE COD_CLI NOT IN (SELECT COD_CLI FROM FONE)

/* seleciona todos os registros da tabela CLIENTE onde exibe os


clientes que possuem email */
SELECT * FROM CLIENTE
WHERE COD_CLI IN (SELECT COD_CLI FROM EMAIL)

/* seleciona todos os registros da tabela CLIENTE onde exibe os


clientes que fizeram pedidos e foi atendido pelo funcionrio 6 */
SELECT * FROM CLIENTE
WHERE

COD_CLI

IN

(SELECT

COD_CLI

FROM

PEDIDO

WHERE COD_FUNC=6)

/* seleciona todos os registros da tabela cliente onde exibe os


dados dos clientes que so casados e que possui email */
SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT
COD_CLI

FROM

CONJUGE

WHERE

COD_CLI

IN

(SELECT

COD_CLI FROM EMAIL))

/* seleciona todos os registros da tabela cliente onde exibe os


dados dos clientes que so solteiros, que no possui email e no
possui telefone e cliente do sexo Feminino */
SELECT * FROM CLIENTE WHERE COD_CLI NOT IN (SELECT
COD_CLI FROM CONJUGE WHERE COD_CLI NOT IN (SELECT
COD_CLI FROM EMAIL WHERE COD_CLI NOT IN (SELECT
COD_CLI FROM FONE))) AND SEXO_CLI=F

Alguns casos podem ser resolvidos tanto por SUBQUERIES como por
JOINS, outros apenas por SUBQUERIES.

Banco de Dados
Autor: Nilson A. Borges

58 de 101

MICROSOFT SQL SERVER 2008

15. JOIN (Relacionamento de tabelas)


15.1 Introduo a Joins:
Um join uma operao que permite voc consultar duas ou mais
tabelas para produzir um result set que incorpora linhas e colunas de cada
tabela. Seu join ocorre em colunas das tabelas que so comuns em ambas s
tabelas.
Quando na execuo de um join de tabelas, o SQL Server compara os
valores das colunas especificas, linha a linha e ele usa o resultado da
comparao para combinar os valores qualificando para novas linhas.
So quatro tipos de joins: inner joins, outer joins, cross joins e self joins.

15.2 TIPOS DE JOINS


Inner Join
Outer Join
Cross Join
Self Join

15.2.1 Usando Inner Joins:


Inner joins combinam tabelas pela comparao em colunas que so
comuns a ambas as tabelas. SQL Server retorna somente linhas que atendem
as condies do join.
Quando usar joins considere os seguintes fatos e diretrizes:
Inner Joins so DEFAULT SQL Server. Voc pode abreviar a clausula
INNER JOIN para JOIN.
Especifique as colunas que voc gostaria de mostrar no seu result set
pela incluso do qualified name da coluna na listas do select.
Inclua a clausula Where para restringir as linhas que so retornadas no
result set.

Banco de Dados
Autor: Nilson A. Borges

59 de 101

MICROSOFT SQL SERVER 2008


No use um valor nulo como uma condio join porque valores nulos no
so avaliados igualmente com um outro.
INNER JOIN

Este simples, o mais entendvel e o mais comum. Esta consulta retornar


todos os registros da tabela esquerda (tabela A) que tm correspondncia com
a tabela direita (tabela B). Podemos escrever este JOIN da seguinte forma:
Exemplos:
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE INNER JOIN EMAIL
ON CLIENTE.COD_CLI =EMAIL.COD_CLI

15.2.2 Usando Outer Joins:


Voc usa um outer join para ver linhas que normalmente no atendem a
uma condio de join.
Operador do Outer join um sinal de (*) antes ou depois da condio de
igualdade, ou usando a palavra chave LEFT OUTER JOIN, RIGHT
OUTER JOIN.
Left ou Right outer joins, combinam linhas a partir de duas tabelas que
atenda a uma condio de join, mais qualquer das linhas que no atendam ou
da tabela do lado esquerdo ou da tabela do lado direito como especificado na
clausula JOIN. Linhas que no atendem a condio join mostram null no result
set.

Banco de Dados
Autor: Nilson A. Borges

60 de 101

MICROSOFT SQL SERVER 2008


Voc tambm pode usar full outer joins para mostrar toas s linhas nas
tabelas join, indiferentemente das tabelas terem atendido quaisquer dos
valores.
Quando utilizar left ou right outer joins, considere os seguintes fatos ou
diretrizes:

SQL Server retorna somente linhas nicas quando voc usa left ou right
outer joins.

Use um left outer join para mostrar todas as linhas a partir da primeira
tabela nomeada. Se voc inverter a ordem no qual as tabelas esto
listadas na clausula FROM, a declarao produz o mesmo resultado
como um right outer join.

No use um valor nulo como condio de join porque valores nulos so


avaliados igualmente com um outro.

Voce pode abreviar o LEFT OUTER JOIN ou RIGHT OUTER JOIN


como LEFT JOIN ou RIGHT JOIN.

Voc pode usar outer joins entre duas tabelas somente.

LEFT JOIN

Esta consulta retorna todos os registros da tabela esquerda (tabela A) e


as correspondncias que existirem com a tabela direita (tabela B). O cdigo
ficar da seguinte forma:
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE LEFT JOIN EMAIL
ON CLIENTE.COD_CLI =EMAIL.COD_CLI

Banco de Dados
Autor: Nilson A. Borges

61 de 101

MICROSOFT SQL SERVER 2008


RIGHT JOIN

Esta consulta retornar todos os registros da tabela direita (tabela B) e


as correspondncias que existirem com a tabela esquerda (tabela A). O cdigo
ficar da seguinte forma:
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE RIGHT JOIN EMAIL
ON CLIENTE.COD_CLI =EMAIL.COD_CLI

15.2.3. Usando Cross Joins:


Cross join mostra combinao de todas as linhas das tabelas unidas.
Nenhuma coluna comum ser necessria para fazer um cross join.
Quando voc usa cross joins, SQL Server produz um produto cartesiano
no qual o numero de linhas no resultado seja igual ao numero de segunda
tabela. Por exemplo, se so 8 linhas na primeira tabela e 9 linhas na outra
tabela SQL Server retorna um total de 72 linhas.
OUTER JOIN

Este JOIN tambm conhecido como FULL OUTER JOIN ou FULL


JOIN. Esta consulta retornar todos os registros das duas tabelas e juntando
tambm os registros correspondentes entres as duas tabelas. O cdigo ficar
da seguinte forma:
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI
FROM CLIENTE CROSS JOIN EMAIL
Banco de Dados
Autor: Nilson A. Borges

62 de 101

MICROSOFT SQL SERVER 2008

15.3 Exemplos de JOIN (Relacionamento de tabelas)


/* seleciona o campo CODIGO, NOME da tabela CLIENTE e o
campo EMAIL DO CLIENTE da tabela EMAIL */
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE INNER JOIN EMAIL
ON CLIENTE.COD_CLI =EMAIL.COD_CLI
OU
SELECT C.COD_CLI,C.NOME_CLI,
E.EMAIL_CLI
FROM CLIENTE C INNER JOIN EMAIL E
ON C.COD_CLI =E.COD_CLI
(Exemplos com

a utilizao de alias)

/*Utilizando o exemplo anterior agora queremos listar todos os


clientes possui ou no email, para fazer tal consulta necessrio a
utilizao do comando OUTER JOIN */
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE LEFT OUTER JOIN EMAIL
ON CLIENTE.COD_CLI = EMAIL.COD_CLI
/*Utilizando o exemplo anterior agora queremos fazer todas as
combinaes possveis de cliente com email, para fazer tal
consulta necessrio a utilizao do comando CROSS JOIN */
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE CROSS JOIN EMAIL

Banco de Dados
Autor: Nilson A. Borges

63 de 101

MICROSOFT SQL SERVER 2008

15.4 Combinao de mais de 2 tabelas


/* seleciona o campo CODIGO, NOME da tabela CLIENTE
NOME_RUA,

NOME_BAIRRO

da

tabela

ENDEREO

NOME_CID da tabela CIDADE, NOME_EST da tabela ESTADO */


SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
ENDERECO.NOME_RUA,ENDERECO.NOME_BAIRRO,
CIDADE.NOME_CID
FROM CLIENTE INNER JOIN ENDERECO
ON CLIENTE.COD_CLI =ENDERECO.COD_CLI
INNER JOIN CIDADE
ON CIDADE.COD_CID = ENDERECO.COD_CID
INNER JOIN ESTADO
ON ESTADO.SIGLA_EST = CIDADE.SIGLA_EST
OU
SELECT CL.COD_CLI,CL.NOME_CLI,E.NOME_RUA,
E.NOME_BAIRRO,CI.NOME_CID
FROM CLIENTE CL JOIN ENDERECO E
ON CL.COD_CLI =E.COD_CLI
JOIN CIDADE CI
ON CI.COD_CID =E.COD_CID
INNER JOIN ESTADO ES
ON ES.SIGLA_EST = CI.SIGLA_EST

Banco de Dados
Autor: Nilson A. Borges

64 de 101

MICROSOFT SQL SERVER 2008

16. CRIANDO VISES (VIEW)


As views nada mais so do que instrues SELECT j pr-definidas
e armazenadas no banco. um objeto do SQL Server utilizado para dar
nome a uma query. Este conceito pode parecer simples, e , mas pode-se
resolver muitos problemas com as views.
Uma view no um programa, portanto dentro dela voc s pode
escrever o comando Select. Voc pode colocar dentro de uma view o
comando select feito com as seguintes critrios:

Consultas com unio (Join)

Consultas com unio (Union)

Consultas com Group By com funo de totalizao

Consultas com subconsultas (Subquery)

Consultas com Order By apenas com Top.

Uma view no pode ter um select com order by sem a clausula Top. Uma
view no recebe parmetros de entrada.
Para criar uma view, utilizamos o comando CREATE VIEW. Sua
sintaxe:
Sintaxe:
CREATE VIEW <view_name> AS
<instruo_SELECT>
Exemplos:

/* Criar uma view que seleciona todos os registros da tabela


CLIENTE onde o campo CODIGO for igual a 1 ou 2 ou 3 ou 4 */
CREATE VIEW V_CLIENTE AS
SELECT * FROM CLIENTE
WHERE COD_CLI IN (1,2,3,4)

Para testar a View digite somente o cdigo abaixo


SELECT * FROM V_CLIENTE
Banco de Dados
Autor: Nilson A. Borges

65 de 101

MICROSOFT SQL SERVER 2008


Suponha que necessitamos liberar o acesso aos dados da tabela
Funcionrio, mas no podemos liberar o acesso aos dados da coluna Salrio
(Sal_Func). Para solucionar esta questo, voc poderia criar uma View sobre
essa tabela e liberar para o usurio acesso tabela apenas por meio da view:

/* Criar uma view Funcionrio da situao relatada anteriormente */


CREATE VIEW V_FUNC AS
SELECT COD_FUNC,NOME_FUNC,
SEXO_FUNC,END_FUNC
FROM FUNCIONARIO

Para testar a View digite somente o cdigo abaixo


SELECT * FROM V_FUNC
Outro ponto importante sobre as views: no podemos utilizar a
clusula ORDER BY na definio da view. Como uma exceo: quando se
utiliza TOP para limitar os registros:
-- Isto uma definio vlida de uma view
CREATE VIEW V_PEDIDO
AS
SELECT TOP 50 NUM_PED,COD_CLI,DATA_PED
FROM PEDIDO
ORDER BY DATA_PED
Para testar a View digite somente o cdigo abaixo
SELECT * FROM V_FUNC

No podemos utilizar as clusulas COMPUTE, COMPUTE BY e INTO dentro


de uma view

Banco de Dados
Autor: Nilson A. Borges

66 de 101

MICROSOFT SQL SERVER 2008

17. CRIANDO FUNCTION (UDF :FUNCES DEFINIDAS PELO O


USURIO )
Nas linguagens de programao as funes quebram grandes
tarefas de processamento de dados em pequenas partes. Conjuntos
complexos de funes podem ser divididos em pequenas unidades lgicas
mais facilmente gerenciveis. Qualquer cdigo que deve executar uma tarefa
lgica especfica, quando incorporado a uma funo, pode ser chamado de
dentro de um programa sem a necessidade de repetir o cdigo responsvel por
aquela tarefa vrias vezes.
Uma funo definida pelo usurio (UDF) um mdulo de instrues
Transact-SQL que pode ou no possuir argumentos e que retorna um
resultado. Por exemplo, uma funo pode informar o valor de uma parcela
mensal a partir de uma taxa de juros informada, calcular a distncia entre dois
pontos, selecionar uma lista de empregados que pertencem a um
departamento, etc.
Uma UDF muito parecida com uma stored procedure, ou seja,
possui instrues que controlam o fluxo do programa e a manipulao dos
dados.
Uma UDF difere de uma stored procedure nos seguintes aspectos:

No permite qualquer alterao no estado global da sesso, por


exemplo, como a mudana do banco de dados.

No permite a utilizao de parmetros com a clsula OUTPUT.

No pode ser usada com a opo FOR XML para obteno do


resultado. Portanto, a opo FOR XML pode ser utilizada
apenas em stored procedures.

Erros do Transact-SQL que causam o cancelamento da instruo,


e ento continuam na prxima instruo de um mdulo (como em
triggers e stored procedures) so tratados de modo diferente
dentro de uma funo. Em uma funo, os erros encontrados em
instrues Transact-SQL interrompem seu processamento.
Banco de Dados

Autor: Nilson A. Borges

67 de 101

MICROSOFT SQL SERVER 2008


Entretanto, se voc necessita de procedimentos que retornam
resultados, uma UDF frequentemente a melhor escolha para uma aplicao
SQL, pelo simples fato de poder ser chamada a partir de uma instruo SQL.

18.1 Definindo uma function UDF:


Antes de poder definir uma UDF, deve-se determinar suas
caractersticas, tais como, seu nome, sua vinculao ou no aos objetos
referenciados, o nmero e tipos de dados dos parmetros que ela ter, e
finalmente, os tipos de valores retornados. Voc ento executa a instruo
CREATE FUNCTION para criar a UDF. Caso aps definir a funo, voc venha
a descobrir que qualquer uma das caractersticas no so apropriadas, voc
poder usar a instruo ALTER FUNCTION para alterar as informaes
utilizadas em sua definio.
Voc no poder fazer uso da instruo ALTER FUNCTION para
modificar o tipo de uma funo, ou seja, uma funo do tipo scalar valued para
uma funo do tipo table valued ou vice-versa. Similarmente, voc no poder
utilizar a instruo ALTER FUNCTION para modificar uma funo do tipo inline
para uma funo multi-statement ou vice-versa. Entretanto, voc poder
remover funes UDF com a instruo DROP FUNCTION.
necessrio ter permisso sobre a instruo CREATE FUNCTION
para criar, alerar ou excluir UDFs. Outros usurios, alm do criador da UDF,
devem ter as permisses apropriadas antes de poder utiliz-la em instrues
Transact-SQL. Para criar ou alterar tabelas com CHECK constraint, clusula
DEFAULT ou uma computed column, que faam referncias a UDFs, o usurio
deve ter a permisso de REFERENCES sobre a funo.
As instrues vlidas em uma funo incluem:

A instruo DECLARE poder ser utilizada para definer as variveis e


cursores que sero locais para a funo.

Banco de Dados
Autor: Nilson A. Borges

68 de 101

MICROSOFT SQL SERVER 2008

As atribuies de valores para objetos locais da funo so permitidas


com a utilizao da opo SET para variveis locais do tipo table e
scalar.

Operaes com cursores locais que so declarados, abertos, fechados e


liberados dentro da funo. A instruo FETCH que retorna dados para
o cliente no permitida. Apenas a instruo FETCH que atribui valores
para variveis locais e que utilizam a clusula INTO so permitidas.

So permitidas as instrues de controle de fluxo (tais como IF..ELSE,


WHILE, RETURN, GOTO, BREAK, and CONTINUE).

As instrues SELECT que contenham expresses que atribuam valores


para variveis que so locais para a funo.

As instrues UPDATE, INSERT, and DELETE que modificam variveis


do tipo table que so locais para a funo.

A instruo EXECUTE com chamadas para extended stored procedures.

As seguintes regras se aplicam quando uma UDF faz chamadas a uma


extended stored procedure:

A extended stored procedure no pode retornar dados para o cliente. Se


a stored procedure retorna dados, a execuo da funo chamadora
falhar.

A extended stored procedure pode se reconectar ao SQL Server;


entretanto, a chamada a extended stored procedure deve fazer parte da
mesma transao que a funo que a chamou

As funes que chamam extended stored procedure so marcadas


como funes nondeterministic. (Veja abaixo no tem determinismo da
funo).

A extended stored procedure executada no contexto de segurana da


conta de usurio do Microsoft Windows sob a qual o SQL Server est
rodando. O criador da stored procedure deve considerer isso quando
atribuir direitos de EXECUTE para os usurios.
Banco de Dados

Autor: Nilson A. Borges

69 de 101

MICROSOFT SQL SERVER 2008

18.2 Tipos de Function:


O SQL Server 2000 implementa trs tipos de UDFs assim conhecidas:

Scalar valued functions

In-line table valued functions

Multi-statement table valued functions

18.2.1. Funes Scalar valued:


Uma funo definida pelo usurio do tipo scalar valued retorna um
nico valor em resposta a cada uma das chamadas funo. Uma funo do
tipo scalar valued se a clusula de retorno especifica um tipo de dado scalar do
SQL Server. Funes do tipo Scalar valued podem ser definidas com a
utilizao de mltiplas instrues Transact-SQL.
Exemplo 1:
CREATE FUNCTION F_Volume
(@Altura decimal (4,1), @Largura decimal (4,1), @Profund
decimal (4,1))
RETURNS decimal (12,3) - tipo de dado de retorno
AS
BEGIN
RETURN (@Altura * @Largura * @Profund)
END
A clusula RETURNS, no exemplo anterior, especifica que um
decimal scalar_data_type sera retornado pela funo. A clusula RETURNS
pode ser qualquer um dos tipos de dados conhecidos como scalar_data_types
do SQL Server exceto timestamp, text, ntext, or image.
Para as funes do tipo scalar valued, utiliza-se a instruo
RETURN com um argumento. O valor desse argumento retornado como o
resultado da funo. O tipo de dado do argumento passado com a instruo
RETURN deve poder ser implicitamente convertido para o tipo de dado do
valor de retorno da funo.

Banco de Dados
Autor: Nilson A. Borges

70 de 101

MICROSOFT SQL SERVER 2008


Nas chamadas s funes do tipo scalar, deve-se utilizar ou o formato
de nome nome_do_usurio.nome_da_funo ou nome do banco de dados
nome do usurio. nome_da_funo
Voc no pode usar o nome da funo isoladamente; essa restrio
existe para diferenciar as chamadas s UDFs das chamadas s funes do
SQL Server. Ns poderamos chamar a funo que definimos anteriormente da
seguinte forma:
Para testar a Function
Select dbo.F_Volume(12.2,10.6,10.0)

Exemplo 2 :

Funo onde calcula o fatorial de um nmero inteiro qualquer.


CREATE FUNCTION F_CalcFact ( @N int )
RETURNS float
AS
BEGIN
DECLARE @R float
SET @R = 1
DECLARE @I int
SET @I = 1
WHILE @I <= @N
BEGIN
SET @R = @R * @I
SET @I = @I + 1
END
RETURN @R
END

Para testar a Function para o fatorial de 5


select dbo.calcfact(5)
Banco de Dados
Autor: Nilson A. Borges

71 de 101

MICROSOFT SQL SERVER 2008


Exemplo 3:
Funo onde calcula o comprimento de uma circunferncia.
CREATE FUNCTION F_PERIMETRO
(
@Raio decimal (5,2)
)
RETURNS decimal float - tipo de dado de retorno
AS
BEGIN
RETURN (2 * @Raio * 3.1416 )
END

Para testar a Function com raio de 9 cm


select dbo.f_perimetro(9.5)

18.2.2. Funes Table Valued:

Para funes do tipo inline table valued, a cludula RETURNS


seguida da palavra TABLE sem uma lista de colunas. As funes do tipo inline
table valued retornam valores apresentados como se extrados de tabelas e
so definidas com uma nica instruo SELECT em sua construo. As
colunas, incluindo os tipos de dados retornados pela funo, so derivados da
lista da instruo SELECT que define a funo.

Banco de Dados
Autor: Nilson A. Borges

72 de 101

MICROSOFT SQL SERVER 2008


Exemplos
1) Escreva uma funo que retorna todos os dados do funcionrio cujo cdigo
deve ser recebido como parmetro.
CREATE FUNCTION F_Funcionario(@Cod_Func int)
RETURNS TABLE
AS
RETURN(SELECT * FROM Funcionario
WHERE Cod_Func = @Cod_Func)

Para testar
SELECT * FROM F_Funcionario(11)
2) Escreva uma funo que retorna todos os dados do funcionrio.
CREATE FUNCTION F_Funcionario( )
RETURNS TABLE
AS
RETURN(SELECT * FROM Funcionario)
Para testar
SELECT * FROM F_Funcionario( )
3) Escreva uma funo que recebe o cdigo do cliente como parmetro e
retorna a Codigo do cliente e a renda familiar , incluindo na sua renda o salrio
do seu conjuge se ele for casado.*/
CREATE FUNCTION F_RendaTodosCliConj
( @COD_CLI

INT )

RETURNS TABLE
AS RETURN
(SELECT Cliente.Cod_Cli, Cliente.Renda_Cli +
Conjuge.Renda_Conj

AS Renda

FROM Cliente LEFT JOIN Conjuge


ON Cliente.Cod_Cli = Conjuge.Cod_Cli
WHERE CLIENTE.Cod_Cli =@COD_CLI)

Banco de Dados
Autor: Nilson A. Borges

73 de 101

MICROSOFT SQL SERVER 2008


Para Testar
SELECT * FROM F_RendatodosCliConj(1)
SELECT * FROM F_RendatodosCliConj(2)
SELECT * FROM F_RendatodosCliConj(4)
4) Escreva uma funo que retorna a renda salarial de todos os cliente,
incluindo na renda de cada um o salrio do seu cnjuge daqueles que so
casados.
CREATE FUNCTION F_RendaTodosCliConj()
RETURNS TABLE
AS
RETURN
(SELECT Cliente.Cod_Cli,
Cliente.Renda_Cli + Conjuge.Renda_Conj

AS Renda

FROM Cliente LEFT JOIN Conjuge


ON Cliente.Cod_Cli = Conjuge.Cod_Cli)
Para testar
SELECT * FROM F_RendatodosCliConj()
5) Escreva uma funo de recebe o nmero de um pedido como parmetro e
retorna o cdigo do funcionrio que atendeu este pedido e o valor e data de
vencimento de cada parcela deste pedido.
CREATE FUNCTION F_PedPar
(@Num_Ped int)
RETURNS TABLE
AS
RETURN (SELECT Funcionario.Cod_Func,
Parcela.Val_Venc,
Parcela.Data_Venc
FROM Funcionario INNER JOIN Pedido
ON Funcionario.Cod_Func = Pedido.Cod_Func
INNER JOIN Parcela
ON Pedido.Num_Ped = Parcela.Num_Ped
WHERE Pedido.Num_Ped = @Num_Ped)

Para testar
SELECT * FROM F_PedPar(1)

Banco de Dados
Autor: Nilson A. Borges

74 de 101

MICROSOFT SQL SERVER 2008


18.2.3. Funes Multi-Statement Table Valued:
Se a clusula RETURNS especificar uma tabela com suas colunas e
tipos de dados, a funo ser do tipo multi-statement table valued.
Exemplo:
Esta funo retorna uma tabela de juros compostos.
CREATE FUNCTION dbo.GetInterest( @NumPeriods int,
@PercentInterest money

RETURNS @InterestTable TABLE


(
Num int,
I money
)
AS
BEGIN
DECLARE @N int
SET @N = 0
DECLARE @ITot money
SET @ITot = 1
WHILE @N < @NumPeriods
BEGIN
SET @N = @N + 1
SET @ITot = @ITot * (1 + (@PercentInterest /
100))
INSERT INTO @InterestTable VALUES(@N, @ITot)
END
RETURN
END
A clusula RETURNS no exemplo acima define uma varivel local
de retorno do tipo table chamada @InterestTable, e tambm define a
estrutura da tabela com a definio das colunas.

Banco de Dados
Autor: Nilson A. Borges

75 de 101

MICROSOFT SQL SERVER 2008


As instrues no corpo da funo inserem linhas na varivel table
local @InterestTable

para construir a tabela que ser o resultado

retornado pela funo.


Note que a instruo RETURN no tem argumento. O valor da
varivel local do tipo table definida sera o valor retornado pela funo.
A seguir temos um exemplo de como chamar a funo do tipo multistatement table valued:
Para testar
SELECT * FROM GetInterest(240,11)

No exemplo estamos gerando uma tabela de juros com 240 perodos com juros
de 11%
Opcionalmente, chamadas s funes do tipo table valued podero ser seguida
de um alias para a tabela. Pode-se tambm utilizar um alias para se referir s
colunas que so retornadas pela funo nas clusulas SELECT e WHERE.

Banco de Dados
Autor: Nilson A. Borges

76 de 101

MICROSOFT SQL SERVER 2008

18. CRIANDO STORED PROCEDURE


(PROCEDIMENTOS)
Stored Procedures: so conjuntos de instrues, armazenados em
bancos de dados, que realizam operaes com os demais dados do banco.
So teis em um programa por vrias razes, uma delas para se evitar a
necessidade de ler os dados do banco, fazer as operaes neles e depois
gravar novamente. Outra pela possibilidade que trazem de se balancear o
processamento entre o servidor de banco de dados e o servidor da aplicao
que acessa o banco.
Um procedimento armazenado (procedure) uma coleo salva de
instrues Transact-SQL ou uma referncia a um mtodo CLR (Common
Language Runtime) Microsoft .NET Framework que pode usar e retornar
parmetros fornecidos pelo usurio. Os procedimentos podem ser criados para
uso permanente ou temporrio em uma sesso, procedimento temporrio local,
ou uso temporrio em todas as sesses, procedimento temporrio global.
Os procedimentos armazenados tambm podem ser criados para
serem executados automaticamente quando uma instncia do SQL Server
iniciada.
Em seguida vamos concatenar o valor do parmetro com uma string
e colocar a string completa dentro de uma varivel. Por fim, iremos executar
esta instruo com o comando EXECUTE() do SQL Server. O cdigo desta
Stored Procedure mostrado abaixo:

/* Esta Procedure vai fazer um Select Dinmico em alguma Tabela */


CREATE PROCEDURE ST_SQL_DINAMICO @NOME_TABELA
VARCHAR(50)
AS
BEGIN
/* Declarando a Varivel que conter a instruo */
DECLARE @INSTR_SQL VARCHAR(500)

Banco de Dados
Autor: Nilson A. Borges

77 de 101

MICROSOFT SQL SERVER 2008


/* Contatenando a instruo com o Nome da Tabela */
SET @INSTR_SQL = "SELECT * FROM " + @NOME_TABELA
/* EXECUTANDO A INSTRUO DINAMICAMENTE */
EXECUTE(@INSTR_SQL)
END

Para executar esta Stored Procedure basta indicar qual o nome da


tabela:
EXEC ST_SQL_DINAMICO "Infonew.dbo.Cliente"
Muito bem, vimos como funciona a execuo dinmica de instrues do
SQL Server. Mas quais so os pontos negativos da execuo dinmica?
Em exemplos como o citado acima no h grandes problemas. O SQL
Server s vai ter um pouco de trabalho para fazer o parser da instruo
em tempo de execuo, compilar e colocar o plano de execuo no
procedure cache a cada vez que esta Stored Procedure for executada. Se
esta Stored Procedure for executada muitas vezes podemos contornar o
problema acima utilizando a system Stored Procedure sp_executesql no
lugar do EXECUTE(). Para mais informaes sobre a sp_executesql
procurem na documentao oficial do SQL Server, o Books Online, que
contm uma boa descrio de seus parmetros e alguns exemplos de
uso. Outro inconveniente da execuo dinmica o retorno de dados. Se
desejarmos fazer alguma manipulao nos dados retornados por uma
execuo dinmica, devemos fazer uso de uma tabela temporria que
ser preenchida com o retorno da execuo. Esta tabela temporria vai
armazenar o ltimo resultado da(s) instruo(es) dinmica(s) e deve
conter a mesma quantidade e tipos de dados das colunas que o
resultado.

Banco de Dados
Autor: Nilson A. Borges

78 de 101

MICROSOFT SQL SERVER 2008

Sintaxe
CREATE { PROC | PROCEDURE } [schema_name.]
procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ]
[READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ ...n ] |
<method_specifier> }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE AS Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
EXTERNAL NAME assembly_name.class_name.method_name

Argumentos
schema_name
o nome do esquema ao qual o procedimento pertence.
procedure_name
o nome do novo procedimento armazenado. Os nomes de
procedimento devem estar de acordo com as regras para identificadores e
devem ser exclusivos no esquema.
Recomendamos fortemente que voc no use o prefixo sp_ no nome
de procedimento. Este prefixo usado pelo SQL Server para designar
procedimentos armazenados de sistema.

Banco de Dados
Autor: Nilson A. Borges

79 de 101

MICROSOFT SQL SERVER 2008


Para obter mais informaes, consulte Criando procedimentos
armazenados (Mecanismos de Banco de Dados).
Os procedimentos temporrios locais ou globais podem ser criados
usando um sinal numrico (#) antes de procedure_name (#procedure_name)
para procedimentos temporrios locais e dois sinais numricos para
procedimentos temporrios globais (##procedure_name). Nomes temporrios
no podem ser especificados para procedimentos armazenados CLR.
O nome completo para um procedimento armazenado ou um
procedimento armazenado temporrio global, incluindo ##, no pode exceder
128 caracteres. O nome completo para um procedimento armazenado
temporrio local, incluindo #, no pode exceder 116 caracteres.
; number
um inteiro opcional usado para agrupar procedimentos do mesmo
nome. Esses procedimentos agrupados podem ser descartados juntos usando
uma instruo DROP PROCEDURE. Por exemplo, um aplicativo chamado
ordens poderia usar procedimentos chamados orderproc;1, orderproc;2 e assim
por diante.
A instruo orderproc de DROP PROCEDURE descarta o grupo
inteiro. Se o nome tiver identificadores delimitados, o nmero no dever ser
includo como parte do identificador; use o delimitador apropriado somente no
procedure_name.
Os procedimentos armazenados numerados tm as seguintes
restries:

Banco de Dados
Autor: Nilson A. Borges

80 de 101

MICROSOFT SQL SERVER 2008


@ parameter
um parmetro no procedimento. Um ou mais parmetros podem
ser declarados em uma instruo CREATE PROCEDURE. O valor de cada
parmetro declarado deve ser fornecido pelo usurio quando o procedimento
chamado, a menos que um padro para o parmetro seja especificado ou o
valor seja definido como igual a outro parmetro. Um procedimento
armazenado pode ter no mximo 2.100 parmetros. Se o procedimento
contiver parmetros com valor de tabela, e faltar um parmetro na chamada,
um padro de tabela vazia ser transmitido.
Especifique um nome de parmetro usando um sinal de arroba (@)
como o primeiro caractere. O nome do parmetro deve estar em conformidade
com as regras de identificadores. Os parmetros so locais para o
procedimento; os mesmos nomes de parmetro podem ser usados em outros
procedimentos. Por padro, os parmetros s podem assumir o lugar de
expresses constantes; eles no podem ser usados no lugar de nomes de
tabela, nomes de coluna ou nomes de outros objetos de banco de dados. Para
obter mais informaes, consulte EXECUTE (Transact-SQL).
Para procedimentos armazenados CLR, char, varchar, text, ntext,
image, cursor, tipos de tabela definidos pelo usurio e table no podem ser
especificados como parmetros. Para obter mais informaes sobre a
correspondncia entre tipos CLR e tipos de dados de sistema do SQL Server,
consulte Mapeando dados de parmetro CLR.
Para obter mais informaes sobre tipos de dados de sistema SQL
Server e sua sintaxe, consulte Tipos de dados (Transact-SQL).
Se o tipo de dados do parmetro for do tipo de dados CLR definido
pelo usurio, ser necessrio ter a permisso EXECUTE para o tipo.

Banco de Dados
Autor: Nilson A. Borges

81 de 101

MICROSOFT SQL SERVER 2008


Se type_schema_name no for especificado, o Mecanismo de
Banco de Dados do SQL Server far referncia a type_name na seguinte
ordem:

Tipos de dados de sistema do SQL Server.

O esquema padro do usurio atual no banco de dados atual.

O esquema dbo no banco de dados atual.

Para procedimentos armazenados numerados, o tipo de dados no pode ser


xml ou um tipo de dados CLR definido pelo usurio.
VARYING
Especifica o conjunto de resultados com suporte como um parmetro de
sada. Este parmetro construdo dinamicamente pelo procedimento
armazenado e seu contedo pode variar. Aplica-se somente a parmetros
cursor.
DEFAULT
um valor padro para o parmetro. Se um valor default for definido, o
procedimento poder ser executado sem especificar um valor para aquele
parmetro. O padro deve ser uma constante ou pode ser NULL. Se o
procedimento usar o parmetro com a palavra-chave LIKE, poder incluir os
seguintes caracteres curinga: % _ [] and [^].
OUTPUT
Indica que o parmetro um parmetro de sada. O valor desta opo
pode ser retornado para a instruo EXECUTE de chamada. Use parmetros
OUTPUT para retornar valores ao chamador do procedimento. Parmetros text,
ntexte image no podem ser usados como parmetros OUTPUT, a menos que
o procedimento seja CLR. Um parmetro de sada que usa a palavra-chave
OUTPUT pode ser um espao reservado de cursor, a menos que o
procedimento seja CLR. Um tipo de tabela definido pelo usurio no pode ser
especificado como um parmetro OUTPUT de um procedimento armazenado.
Banco de Dados
Autor: Nilson A. Borges

82 de 101

MICROSOFT SQL SERVER 2008


READONLY
Indica que o parmetro no pode ser atualizado ou modificado no corpo
do procedimento. Se o tipo de parmetro for um tipo de tabela definido pelo
usurio, dever ser especificado READONLY.
RECOMPILE
Indica que o Mecanismo de Banco de Dados no armazena em cache
um plano para esse procedimento e o procedimento compilado em tempo de
execuo. Esta opo no pode ser usada quando FOR REPLICATION
especificado. RECOMPILE no pode ser especificado para procedimentos
armazenados CLR.Para instruir o Mecanismo de Banco de Dados a descartar
planos para consultas individuais dentro de um procedimento armazenado, use
a dica de consulta RECOMPILE. Para obter mais informaes, consulte dicas
de consulta (Transact-SQL). Use a dica de consulta RECOMPILE quando
valores atpicos ou temporrios so usados em apenas um subconjunto de
consultas que pertencem ao procedimento armazenado.
ENCRYPTION
Indica que o SQL Server converter o texto original da instruo
CREATE PROCEDURE em um formato ofuscado. A sada do ofuscamento no
diretamente visvel em quaisquer exibies do catlogo no SQL Server. Os
usurios que no tiverem acesso a tabelas do sistema ou arquivos de banco de
dados no podero recuperar o texto ofuscado. Entretanto, o texto estar
disponvel para usurios privilegiados que puderem acessar as tabelas do
sistema na porta DAC ou acessar diretamente os arquivos de banco de dados.
Alm disso, os usurios que podem anexar um depurador ao processo de
servidor tambm podem recuperar o procedimento descriptografado da
memria em tempo de execuo. Para obter mais informaes sobre como
acessar os metadados do sistema, consulte Configurao de visibilidade de
metadados.

Banco de Dados
Autor: Nilson A. Borges

83 de 101

MICROSOFT SQL SERVER 2008


EXECUTE AS
Especifica o contexto de segurana sob o qual o procedimento
armazenado deve ser executado.
FOR REPLICATION
Especifica que procedimentos armazenados que so criados para
replicao no podem ser executados no Assinante. Um procedimento
armazenado criado com a opo FOR REPLICATION usado como um filtro
de procedimento armazenado e executado somente durante a replicao. Os
parmetros no podero ser declarados se FOR REPLICATION for
especificado.

FOR

REPLICATION

no

pode

ser

especificado

para

procedimentos armazenados CLR. A opo RECOMPILE ignorada para


procedimentos criados com FOR REPLICATION.Um procedimento FOR
REPLICATION ter um tipo de objeto RF em sys.objects e sys.procedures.
Procedimentos armazenados temporrios
O Mecanismo de Banco de Dados oferece suporte a dois tipos de
procedimentos temporrios: local e global. Um procedimento temporrio local
visvel somente para a conexo que o criou. Um procedimento temporrio
global est disponvel para todas as conexes. Os procedimentos temporrios
locais so descartados automaticamente ao trmino da sesso atual. Os
procedimentos temporrios globais so descartados ao trmino da ltima
sesso que usa o procedimento. Para obter mais informaes, consulte
Criando procedimentos armazenados (Mecanismos de Banco de Dados).
Procedimentos armazenados executados automaticamente
Um ou mais procedimentos armazenados podem ser executados
automaticamente quando o SQL Server iniciado. Os procedimentos
armazenados devem ser criados pelo administrador de sistema no banco de
dados mestre e executados na funo de servidor fixa sysadmin como um
processo de segundo plano.
Banco de Dados
Autor: Nilson A. Borges

84 de 101

MICROSOFT SQL SERVER 2008


Os procedimentos no podem ter nenhum parmetro de entrada ou de
sada. Para obter mais informaes, consulte Execuo automtica de
procedimentos armazenados.
Aninhamento de procedimentos armazenados
Os procedimentos armazenados podem ser aninhados. Isso significa um
procedimento armazenado pode chamar outro. O nvel de aninhamento
incrementado quando o procedimento chamado comea a ser executado e
decrescido quando a execuo do procedimento chamado concluda. Os
procedimentos armazenados podem ser aninhados em at 32 nveis. Para
obter mais informaes, consulte Aninhando procedimentos armazenados.
Em um procedimento armazenado, os nomes de objeto usados com
todas as instrues DDL (Data Definition Language), tais como as instrues
CREATE, ALTER, ou instrues DROP, DBCC, EXECUTE e instrues
dinmicas SQL, devem ser qualificadas com o nome do esquema de objeto, se
outros usurios, que no o proprietrio do procedimento armazenado, usarem
esse procedimento.
Exemplo 1:
Escreva uma procedure onde faa a multiplicao de 2 nmeros
CREATE PROCEDURE SP_CONTA
@NUM_1 INT,
@NUM_2 INT,
@RESPOSTA Decimal(6,2) Output
AS Set @RESPOSTA = @NUM_1 * @NUM_2
Para Testar

DECLARE @RESPOSTA Decimal(6,2)


EXEC SP_CONTA 10,7, @RESPOSTA Output
PRINT @RESPOSTA

Banco de Dados
Autor: Nilson A. Borges

85 de 101

MICROSOFT SQL SERVER 2008


Exemplo 2:
Escreva uma procedure onde faa a multiplicao dos 2 primeiros nmeros e
diviso pelo 3 nmero
CREATE PROCEDURE SP_CONTA2
@NUM_1 decimal(4,2),
@NUM_2 decimal(4,2),
@NUM_3 decimal(4,2),
@RESPOSTA decimal(10,2) Output
AS Set @RESPOSTA = (@NUM_1 + @NUM_2)/@NUM_3
Para Testar

DECLARE @RESPOSTA decimal(10,2)


EXEC SP_CONTA2 7.5,5,2, @RESPOSTA Output
PRINT @RESPOSTA

Exemplo 3:
Escreva uma procedure onde entre com a nota p1 e p2 e mostre a mdia
escolar
CREATE PROCEDURE SP_MEDIA
@NUM_1 decimal(3,1),
@NUM_2 decimal(3,1),
@RESPOSTA decimal(3,1) Output
AS Set @RESPOSTA = (@NUM_1 + @NUM_2*2)/3
Para Testar

DECLARE @RESPOSTA decimal(3,1)


EXEC SP_MEDIA 7.5,6, @RESPOSTA Output
PRINT @RESPOSTA

Banco de Dados
Autor: Nilson A. Borges

86 de 101

MICROSOFT SQL SERVER 2008

Exemplo 4:
Escreva uma procedure se a soma dos salrios dos funcionrios for maior do
que 5000 aplique um aumento de 15,23% para todos funcionrios. Caso
contrrio 10,45%.
USE INFONEW
GO
CREATE PROCEDURE SP_FUNCIONARIO
As DECLARE @PERCENT DECIMAL(10,2)
IF (SELECT sum(Sal_Func) FROM FUNCIONARIO)>=5000
SET @PERCENT = 1.1523
ELSE
SET @PERCENT = 1.1045
UPDATE FUNCIONARIO SET SAL_FUNC = SAL_FUNC * @PERCENT
Para Testar

EXEC SP_FUNCIONARIO
Select * from funcionario (Verificar o novo salario)

Banco de Dados
Autor: Nilson A. Borges

87 de 101

MICROSOFT SQL SERVER 2008


Exemplo 5:
Escreva uma procedure se a mdia salarial dos funcionrios for maior do que
3500 aplique um aumento de 13,3% para todos os funcionrios. Caso contrrio
9,4%.
USE INFONEW
CREATE PROCEDURE SP_FUNCIONARIO2
As DECLARE @PERCENT DECIMAL(10,2)
IF (SELECT avg(Sal_Func) FROM FUNCIONARIO)>=3500
SET @PERCENT = 1.133
ELSE
SET @PERCENT = 1.094
UPDATE FUNCIONARIO SET SAL_FUNC = SAL_FUNC * @PERCENT
Para Testar

EXEC SP_FUNCIONARIO2
Select * from funcionario (Verificar o novo salario)

Banco de Dados
Autor: Nilson A. Borges

88 de 101

MICROSOFT SQL SERVER 2008


Exemplo 7:
Escreva uma procedure onde entre com 2 parmetros, onde primeiro indica o
cdigo do produto e o segundo indica o valor da porcentagem de aumento a
USE INFONEW
CREATE PROCEDURE SP_PRODUTO
@COD_PROD INT,
@PERCENT DECIMAL (8,4)
AS
IF @PERCENT = 0 OR @COD_PROD = 0
RETURN(0)
UPDATE PRODUTO
SET VAL_UNITPROD = VAL_UNITPROD * @PERCENT
WHERE COD_PROD = @COD_PROD
Para Testar

EXEC SP_PRODUTO 1,1.25


Select * from PRODUTO (Verificar o novo valor unitrio)

Banco de Dados
Autor: Nilson A. Borges

89 de 101

MICROSOFT SQL SERVER 2008


Exemplo 8:
Escreva uma procedure onde entre com 2 parmetros, onde primeiro indica o
sexo do cliente e o segundo indica o valor da porcentagem de aumento a
USE INFONEW
CREATE PROCEDURE SP_CLIENTE
@SEXO_CLI CHAR(1),
@PERCENT DECIMAL (8,4)
AS
IF @PERCENT = 0
RETURN(0)
UPDATE CLIENTE
SET

RENDA_CLI = RENDA_CLI * @PERCENT

WHERE SEXO_CLI = @SEXO_CLI


Para Testar

EXEC SP_CLIENTE F,1.25


SELECT * FROM Cliente
WHERE Sexo_Cli = 'f'

(Verificar a nova renda dos cliente

onde o sexo igual a F)

Banco de Dados
Autor: Nilson A. Borges

90 de 101

MICROSOFT SQL SERVER 2008

19. CRIANDO TRIGGERS (GATILHOS )


Triggers so procedimentos que podem ser gravados em Transact
SQL, Java, PL/SQL ou C. So executados (ou disparados) implicitamente
quando uma tabela modificada, um objeto criado ou ocorrem algumas
aes de usurio ou de sistema de banco de dados.
As triggers so similares as stored procedures diferindo, apenas, na
maneira como so chamadas. As Triggers so chamadas indiretamente pelos
comandos INSERT, UPDATE ou DELETE executada implicitamente quando
ocorre algum evento de trigger enquanto a stored procedure deve ser
executado explicitamente.
A principal aplicao de uma trigger a criao de restries de
acesso ao banco de dados, como rotinas de segurana.
Em vez de deixarmos o controle da aplicao para a prpria tabela,
passamos a executar por meio de triggers, ou gatilhos, esses controles,
tornando muito mais seguro o manuseio de nossa base de dados.
Entre as vrias utilidades de um trigger, podemos destacar:

Criar mecanismos de validao, os quais envolvam pesquisas


em mais de uma tabela;

Inserir o contedo de uma coluna derivada de outras colunas;

Atualizar outras tabelas em funo de incluso ou alterao


de dados da tabela que estamos utilizando;

Criao de logs, ou registros de incluso e alteraes de


usurios.

H outras aplicaes que podemos fazer com triggers, isso depende


da necessidade do desenvolvedor ou DBA.

Banco de Dados
Autor: Nilson A. Borges

91 de 101

MICROSOFT SQL SERVER 2008


Devemos ter em mente dois importantes aspectos de um trigger :
Primeiramente que a ao executada pelo trigger o bloco TransactSQL que criamos e que um trigger pode ser acionado pelos comandos
INSERT, DELETE e UPDATE alm de poder ser chamado quando mais de
uma ao ocorrer.
H tambm certos comandos Transact-SQL que no podem ser
utilizados dentro de um trigger como, por exemplo: ALTER DATABASE, ALTER
PROCEDURE, CREATE DATABASE, CREATE INDEX, DROP DATABASE,
DROP PROCEDURE, entre outros.
Criando um trigger
Modelo para criao de um trigger:
CREATE TRIGGER nome_do_trigger
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [
UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator }
updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}

Banco de Dados
Autor: Nilson A. Borges

92 de 101

MICROSOFT SQL SERVER 2008


Onde:
ON - Indica a tabela ou viso para o qual o trigger est sendo criado;
FOR - Deve ser seguido do tipo de comando ou comandos que disparam o
trigger;
AFTER - Especifica que o trigger disparado apenas quando todas as
operaes especificadas no comando de disparo forem executadas com
sucesso. Todas as aes contraints devem ter sido bem sucedidas antes de o
trigger ser executado. AFTER padro se apenas FOR for especificado.Os
triggers do tipo AFTER no pode ser definidos em vises;
INSTEAD OFF - Especifica que o trigger executado em vez do comando de
disparo desse trigger, ou seja, em vez do comando INSERT, o trigger ser
executado. Podem existir triggers INSTEAD OF para cada comando INSERT,
UPDATE.
Os triggers INSTEAD OF no so permitidos em vises com a opo WITH
CHECK OPTION.

Exemplo prtico de um trigger


Neste exemplo imagine que possumos uma tabela onde ficam armazenados
artigos. A cada alterao feita na tabela imprimir uma mensagem na tela
'Artigo alterado com sucesso!'.
CREATE TRIGGER TRG_Artigos
ON Artigos
FOR INSERT, UPDATE
AS PRINT('Artigo alterado com sucesso!')

Para

alterar

um

trigger

usamos

trigger

utilizamos

comando

ALTER

TRIGGER

DROP

TRIGGER

nome_do_trigger.
Para

excluir

um

comando

nome_do_trigger.
Lembrando que se a tabela que contm o trigger for eliminada o trigger
tambm ser.

Banco de Dados
Autor: Nilson A. Borges

93 de 101

MICROSOFT SQL SERVER 2008


Exemplo:
/* Escreva um trigger que no permita a alterao e a excluso de dados na
tabela Estado * /.
CREATE TRIGGER T_Estado
ON Estado
INSTEAD OF UPDATE,DELETE
AS

RAISERROR('Operao

no

permitida

nesta

tabela',16,1)
Para testar
DELETE ESTADO
OU

INSERT INTO ESTADO VALUES (CL,CALIFRNIA)


OU

UPDATE ESTADO
SET NOME_EST=COLORADO
WHERE SIGLA_EST= CL
O evento define qual a instruo DML que aciona a trigger. Informa
qual instruo SQL ir disparar a trigger. Pode ser:

INSERT

UPDATE

DELETE

Quando o evento for um UPDATE podemos informar quais colunas


que, ao serem alteradas, iro disparar a trigger. O mesmo NO ocorre com
INSERT e DELETE porque essas instrues sempre afetam a linha por inteiro.

Banco de Dados
Autor: Nilson A. Borges

94 de 101

MICROSOFT SQL SERVER 2008


INSTEAD OF indica que a trigger ir ser executada no lugar da instruo que
disparou a trigger. Literalmente, a instruo substituda pela trigger. Essa
tcnica permite que faamos, por exemplo, alteraes em uma tabela atravs
de uma view. usado nos casos em que a view no pode alterar uma tabela
por no referenciar uma coluna com a constraint not null. Nesse caso a trigger
pode atualizar a coluna que a view no tem acesso.

Dois detalhes muito

importantes sobre INSTEAD OF:

S funcionam com views

sempre de linha. Ser considerado assim, mesmo que "FOR EACH


ROW" for omitido.
Exemplo:

/ * Escreva um trigger que realize a baixa em estoque a cada produto vendido


em cada pedido * /
CREATE TRIGGER T_BaixaEstoque
ON Itens
AFTER INSERT
AS
IF(SELECT Cod_Sta FROM Pedido INNER JOIN inserted
ON Pedido.Num_Ped = Inserted.Num_Ped) = 1
--Se o Pedido estiver aberto
UPDATE Produto
SET

Qtd_EstqProd

Qtd_EstqProd

Inserted.Qtd_Vend
FROM Produto INNER JOIN inserted
ON Produto.Cod_Prod = Inserted.Cod_Prod
ELSE
BEGIN
RAISERROR('Este

pedido

no

est

aberto

Operao no Executada',16,1)
ROLLBACK TRANSACTION
RETURN
END
Banco de Dados
Autor: Nilson A. Borges

95 de 101

MICROSOFT SQL SERVER 2008


Para testar
Verificar a quantidade de produtos em estoque do produto de cdigo 1
SELECT * FROM PRODUTO
WHERE COD_PROD = 1

Inserir um novo pedido


insert into pedido
values(1,1,1,'12/03/2009',2300.87)

Verificar qual o nmero do novo pedido


select * from pedido
WHERE data_ped = '12/03/2009'

Inserir um novo itens no pedido consultado anteriormente no caso de nosso


exemplo o pedido de nmero 5125
insert into itens
values(5125,1,25,2500)

Verifique que a quantidade de produto em estoque abaixou em 25 .


SELECT * FROM PRODUTO
WHERE COD_PROD = 1

Desabilitar uma trigger


ALTER

TABLE

nome_tabela

DISABLE

TRIGGER

nome_da_trigger

GO

Habilitar uma trigger


ALTER TABLE nome_tabela ENABLE TRIGGER nome_da_trigger
GO

Banco de Dados
Autor: Nilson A. Borges

96 de 101

MICROSOFT SQL SERVER 2008


/ * Escreva um trigger que realiza uma auditoria no Banco, contendo
informaes do usurio que executou, login , horrio, comandos executados
por este usurio * /
Vamos criar a tabela que vai ser inserido os dados:
Create table Comandos_usuarios
(
Usuario varchar(20),
Login varchar(20),
Horario varchar(30),
Comando varchar(4000)
)

E depois a tabela cadastro


Create table Cadastro
(
Codigo int,
Nome varchar(40)
)

Abaixo esta a trigger:


CREATE TRIGGER TriggerName
ON Cadastro
FOR INSERT, UPDATE, DELETE AS
BEGIN
SET NOCOUNT ON
DECLARE @ExecStr varchar(50), @Qry nvarchar(255)
CREATE TABLE #inputbuffer
(
EventType nvarchar(30),
Parameters int,
EventInfo nvarchar(255)
)
SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')'
INSERT INTO #inputbuffer
EXEC (@ExecStr)
SET @Qry = (SELECT EventInfo FROM #inputbuffer)
INSERT INTO Comandos_usuarios
SELECT USER AS UserName,
SYSTEM_USER as LoginName,
CURRENT_TIMESTAMP AS CurrentTime,
@Qry
END
Banco de Dados
Autor: Nilson A. Borges

97 de 101

MICROSOFT SQL SERVER 2008


Vamos por partes agora,o comando DBCC INPUTBUFFER permite
que quando passamos o SPID da sesso,conseguimos visualizar que comando
o usurio corrente est executando,agora o principal esse dbcc gera um
output , a EventInfo que identifica o comando executado pelo usurio, junto
com isso temos as funes de sistema como USER,SYSTEM_USER e
CURRENT_TIMESTAMP, que pegamos informaes do usurio que executou,
juntando essas informaes temos um log completo sobre o que o usurio
executou, abaixo vamos ver os exemplos, como j criamos a tabela que vai
inserir os logs e a trigger.
Agora vamos inserir dados na tabela cadastro ,depois atualizar e por fim
excluir,esses 3 comandos tem que ser gravados em nossa tabela
Comandos_usuarios.
Verificar a quantidade de registros na tabela comandos_usuarios
SELECT * FROM COMANDOS_USUARIOS

Inserir dados na tabela cadastro


--Insere uma linha
insert cadastro values(1,'Fernando Garcia')
Alterar dados na tabela cadastro
--Atualiza o cidog de 1 para 2
update Cadastro
set codigo = 2
where nome like 'Fernando Garcia'
Excluir dados na tabela cadastro
--Exclui a linha com o codigo atualizado
Delete from cadastro
where codigo = 2
Verificar depois das operaes a quantidade de registros na tabela
comandos_usuarios
SELECT * FROM COMANDOS_USUARIOS

Banco de Dados
Autor: Nilson A. Borges

98 de 101

MICROSOFT SQL SERVER 2008


Com isso vemos que podemos ter um controle sobre os comandos dos
usurios. Alm de ter maior controle de todos os comandos efetuados em
determinadas tabelas.
Exemplo:
/* Escreva um trigger que no permita a excluso de nenhuma tabela no Banco
de Dados Infonew * /.
USE INFONEW
GO
CREATE TRIGGER T_SEGURANCA
ON DATABASE
FOR DROP_TABLE
AS
PRINT

'PARA

APAGAR

TABELAS

DESABILITE

TRIGGER

T_SEGURANCA'

Para testar
DROP TABLE ESTADO
DROP TABLE EMAIL
DROP TABLE FONE

Banco de Dados
Autor: Nilson A. Borges

99 de 101

MICROSOFT SQL SERVER 2008

CONSIDERAES FINAIS
Esta apostila foi confeccionada para os alunos da Instituio de
Ensino Superior Faculdade Anchieta como um material de apoio para a
disciplina Banco de Dados onde utilizado o SGDB SQL Server 2008 verso
Express.
Em caso de dvida mandar e-mail para nilson.dba@gmail.com , no
esquea de citar as mensagens de erro.

Banco de Dados
Autor: Nilson A. Borges
101

100 de

MICROSOFT SQL SERVER 2008

REFERNCIAS BIBLIOGRFICAS:
Leo, Renata de Oliveira
SQL 2000 SERVER: Estrutura e Implementao de Sistemas de Banco de
Dados
So Paulo , Editora Erica, 2002
Ritter, Mauricio
Microsoft SQL SERVER 2008, Fundamentos de Bancos de dados Passo a
Passo

Banco de Dados
Autor: Nilson A. Borges
101

101 de

Você também pode gostar