Documente Academic
Documente Profesional
Documente Cultură
ÍNDICE
1. INTRODUÇÃO............................................................................................................................. 4
Banco de Dados
Autor: Nilson A. Borges 2 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 3 de 101
MICROSOFT SQL SERVER 2008
1. INTRODUÇÃO
Veremos nesta apostila de forma simplificada os comandos de
manipulação e consultas de dados, bem como suas clausulas, operadores e
funções. 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.
Banco de Dados
Autor: Nilson A. Borges 4 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 5 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 6 de 101
MICROSOFT SQL SERVER 2008
SQL Server Web (*x86, *x64): O SQL Server Web é uma opção 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.
* 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
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
autônomos e ocasionalmente conectados para dispositivos móveis, desktops e
clientes Web em todas as plataformas Windows.
Banco de Dados
Autor: Nilson A. Borges 8 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 9 de 101
MICROSOFT SQL SERVER 2008
Ferramentas de Descrição
gerenciamento
Banco de Dados
Autor: Nilson A. Borges 10 de 101
MICROSOFT SQL SERVER 2008
SQL Server Profiler O SQL Server Profiler fornece uma interface gráfica do
usuário para monitorar uma instância do Mecanismo de
Banco de Dados ou do Analysis Services.
Banco de Dados
Autor: Nilson A. Borges 11 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 12 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 13 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 14 de 101
MICROSOFT SQL SERVER 2008
b) model
c) tempdb
d) msdb
Banco de Dados
Autor: Nilson A. Borges 15 de 101
MICROSOFT SQL SERVER 2008
System
tables
System System System
tables tables tables
SAU02 SAU05
MASTER
a) contas de login;
b) processos em andamento;
f) locks ativos;
Banco de Dados
Autor: Nilson A. Borges 16 de 101
MICROSOFT SQL SERVER 2008
MODEL
Banco de Dados
Autor: Nilson A. Borges 17 de 101
MICROSOFT SQL SERVER 2008
3. syscomments - possui uma ou mais linhas para cada view, regra (rule),
padrão (default), trigger e stored procedure que contenha uma
declaração de definição;
4. sysdepends - uma linha para cada procedure, view, ou tabela que seja
referenciada por uma procedure, view ou trigger;
8. sysobjects - uma linha para cada tabela (table), visão (view), stored
procedure, regra (rule), trigger, padrão (default), log e objeto temporário
(somente tempdb);
Banco de Dados
Autor: Nilson A. Borges 18 de 101
MICROSOFT SQL SERVER 2008
TEMPDB
MSDB
Banco de Dados
Autor: Nilson A. Borges 20 de 101
MICROSOFT SQL SERVER 2008
4. CRIAÇÃO DE UM DATABASE
Um database é uma estrutura lógica dentro da qual são 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 transações deste
sistema (inclusões,alterações e exclusões realizadas em seus dados).
Os arquivos de dados ficam organizados em grupos de arquivos e o
primeiro grupo criado automaticamente no momento da criação do database
chama-se PRIMARY.
Banco de Dados
Autor: Nilson A. Borges 21 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 22 de 101
MICROSOFT SQL SERVER 2008
Sp_helpdb bookselva
Banco de Dados
Autor: Nilson A. Borges 23 de 101
MICROSOFT SQL SERVER 2008
5. Criação de Tabelas
São objetos que vão conter os dados de um sistema. Uma tabela é um
objeto bidimensional formado por linhas e colunas. As colunas, ou campos, são
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 serão armazenados no disco. Cada tipo de dados
ocupa um espaço limitado dentro do disco e pode armazenar uma deyerminada
faixa de valor. O SQL Server 2008 possuem vários tipos de datatypes que
podem ser utilizados em colunas das tabelas ou em variáveis de memória.
Possui também regras para garantir a integridade e a consistência dos
dados de uma aplicação, é necessário utilizar:
Datatypes
Nulabilidade
Autonumeração
Constraints
o PK (Primary Key)
o FK (Foreign Key)
Banco de Dados
Autor: Nilson A. Borges 24 de 101
MICROSOFT SQL SERVER 2008
Datatypes são os tipos de dados que o SQL Server aceita. Eles existem
para que possamos definir o tipo de conteúdo de um campo de tabela ou de
uma variável, dentre outras coisas. Lembro a você que não estou colocando
todos os tipos, somente aqueles que usamos “de verdade”, no dia-a-dia.
Existem tipos que armazenam números inteiros ou decimais, datas,
texto, valores binários, além de tipos especiais.
Confira abaixo alguns tipos de datatypes:
Char(n): quando o campo for do tipo alfanumérico e com tamanho fixo,
o n quer dizer limitação, o valor máximo de caracteres;
Varchar(n) : quando o campo for do tipo alfanumérico e com tamanho
não é fixo, o n quer dizer limitação, o valor máximo de caracteres;
Int: quando o campo for numero com valor inteiro.
Decimal (p,s): quando o campo for números com valores decimais, o
valor de p é o numero de algarismos e o s é valor dos algarismos
decimais (algarismos após a virgula).
Money, smallmoney :quando o campo for valores monetários.
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 NUMÉRICOS
TAMANHO MENOR MAIOR
NOME ARMAZENA
(BYTES) VALOR VALOR
BIGINT 8 -263 263 - 1 INTEIRO
31 31
INT 4 -2 2 -1 INTEIRO
15 15
SMALLINT 2 -2 2 -1 INTEIRO
TINYINT 1 0 255 INTEIRO
DECIMAL EXATO, ONDE C INDICA
DECIMAL(C,
VARIÁVEL -1038 1038 - 1 NÚMERO DE POSIÇÕES E D O NÚMERO
D)
DE CASAS DECIMAIS
DECIMAL EXATO, ONDE C INDICA
NUMERIC(C,
VARIÁVEL -1038 1038 - 1 NÚMERO DE POSIÇÕES E D O NÚMERO
D)
DE CASAS DECIMAIS
MONETÁRIO - EQUIVALE A UM
MONEY 8 -263 263 - 1
DECIMAL COM 8 CASAS DECIMAIS
MONETÁRIO - EQUIVALE A UM
SMALLMONEY 4 -231 231 - 1
DECIMAL COM 4 CASAS DECIMAIS
PONTO FLUTUANTE, ONDE D INDICA O
-1.79 X 1.79 X
FLOAT(D) 4 OU 8 NÚMERO MÁXIMO DE CASAS
10308 10308
DECIMAIS, ENTRE 0 E 53
-3.4 X PONTO FLUTUANTE - EQUIVALENTE AO
REAL 4 3.4 X 1038
1038 FLOAT(24)
TIPOS TEXTO
LIMITE TAMANHO
NOME TABELA ARMAZENA
(CARACTERES) (CARACTERES)
CARACTERES, ONDE N
CHAR(N) ASCII 8000 EXATAMENTE N INDICA O TAMANHO DO
CAMPO
CARACTERES, ONDE N
VARCHAR(N) ASCII 8000 ATÉ N INDICA O TAMANHO DO
CAMPO
CARACTERES, ONDE N
NCHAR(N) UNICODE 4000 EXATAMENTE N INDICA O TAMANHO DO
CAMPO
CARACTERES, ONDE N
NVARCHAR(N) UNICODE 4000 ATÉ N INDICA O TAMANHO DO
CAMPO
TEXT ASCII 231 - 1 ATÉ 231 - 1 CARACTERES
31
NTEXT UNICODE 2 -1 ATÉ 231 - 1 CARACTERES
TIPOS DATA
TAMANHO MENOR MAIOR
NOME PRECISÃO ARMAZENA
(BYTES) VALOR VALOR
1753-01-01 9999-12-31
DATETIME 8 3.33 ms DATA/HORA
00:00:00.000 23:59:59.997
1 MINUTO, SENDO QUE
ATÉ 29.998ms
1900-01-01 2079-06-06 ARREDONDA PARA
SMALLDATETIME 4 DATA/HORA
00:00:00 23:59:00 MENOS E ACIMA DISSO
PARA O PROXIMO
MINUTO.
Banco de Dados
Autor: Nilson A. Borges 26 de 101
MICROSOFT SQL SERVER 2008
Nulabilidade
Constraints: Integridade
Banco de Dados
Autor: Nilson A. Borges 27 de 101
MICROSOFT SQL SERVER 2008
Exemplo:
Constraint FK_NotaFiscal Foreign Key(Cód_Cli)
References Cliente(Cod_Cli)
On delete cascade
Banco de Dados
Autor: Nilson A. Borges 28 de 101
MICROSOFT SQL SERVER 2008
AutoNumeração
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)
)
Banco de Dados
Autor: Nilson A. Borges 29 de 101
MICROSOFT SQL SERVER 2008
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
Constraint PK_Prod
Primary Key(Cod_Prod)
)
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
Banco de Dados
Autor: Nilson A. Borges 32 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 33 de 101
MICROSOFT SQL SERVER 2008
Depois clicar no botão ADD logo em seguida irá surgir a tela a seguir
com o relacionamento das tabelas.
Pronto o diagrama das tabelas.
Banco de Dados
Autor: Nilson A. Borges 34 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 36 de 101
MICROSOFT SQL SERVER 2008
Operadores de Comparação
Operador Descrição
= Igual a
<> Diferente
> Maior que
>= Maior ou igual a
< Menor que
<= Menor ou igual a
Exercício
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
Exemplo:
Exercícios
2) Excluir todas as NotasFiscais onde o valor total seja menor ou igual a 4520.21
Banco de Dados
Autor: Nilson A. Borges 38 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 39 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 40 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 41 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 42 de 101
MICROSOFT SQL SERVER 2008
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 43 de 101
MICROSOFT SQL SERVER 2008
Sintaxe:
SELECT <campo> FROM <tabela> [WHERE <condição>]
ORDER BY <campo_ordenacao> [ASC/DESC]
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 44 de 101
MICROSOFT SQL SERVER 2008
Sintaxe:
Exemplos:
/* seleciona o valor do campo NOME da tabela CLIENTES */
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 não aparecer está coluna é necessário criar um alias para a coluna
conforme código 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
Exemplo:
/*serão listados todos os registro da tabela CLIENTES onde o
campo Cod_Cli for igual a 1 */
Banco de Dados
Autor: Nilson A. Borges 46 de 101
MICROSOFT SQL SERVER 2008
Exemplos:
/* seleciona todos os registros da tabela CLIENTE onde o campo
Cod_Cli estiver entre 1 e 5 */
Banco de Dados
Autor: Nilson A. Borges 47 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 48 de 101
MICROSOFT SQL SERVER 2008
Exemplos:
/* seleciona todos os valores do campo Código do Cliente, valor
do pedido da tabela PEDIDO sem repetição dos códigos do cliente
*/
Banco de Dados
Autor: Nilson A. Borges 49 de 101
MICROSOFT SQL SERVER 2008
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 50 de 101
MICROSOFT SQL SERVER 2008
Sintaxe
SELECT (<campo_agrupamento> e/ou <funcao_agrupamento>)
FROM <tabela> [WHERE <condição>]
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
Banco de Dados
Autor: Nilson A. Borges 51 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 52 de 101
MICROSOFT SQL SERVER 2008
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 53 de 101
MICROSOFT SQL SERVER 2008
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 54 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 55 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 56 de 101
MICROSOFT SQL SERVER 2008
Sintaxe:
Não existe uma sintaxe fixa, mas existem algumas restrições:
- deve estar sempre entre parênteses;
- não pode ser usada na cláusula ORDER BY;
- a subquery não pode conter ORDER BY, COMPUTE ou SELECT
INTO
- a subquery não pode, em hipótese alguma, retornar mais de uma
coluna no caso de comparação por valores ou listas;
- a subquery deve usar a função EXISTS se fizer um SELECT *;
- não pode usar na lista de colunas do SELECT uma coluna do tipo
IMAGE ou TEXT.
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 57 de 101
MICROSOFT SQL SERVER 2008
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
Inner Join
Outer Join
Cross Join
Self Join
Banco de Dados
Autor: Nilson A. Borges 59 de 101
MICROSOFT SQL SERVER 2008
Não use um valor nulo como uma condição join porque valores nulos não
são avaliados igualmente com um outro.
INNER JOIN
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE INNER JOIN EMAIL
ON CLIENTE.COD_CLI =EMAIL.COD_CLI
Você usa um outer join para ver linhas que normalmente não atendem a
uma condição de join.
Operador do Outer join é um sinal de (*) antes ou depois da condição 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 condição de join, mais qualquer das linhas que não atendam ou
da tabela do lado esquerdo ou da tabela do lado direito como especificado na
clausula JOIN. Linhas que não atendem a condição join mostram null no result
set.
Banco de Dados
Autor: Nilson A. Borges 60 de 101
MICROSOFT SQL SERVER 2008
Você também 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 estão
listadas na clausula FROM, a declaração produz o mesmo resultado
como um right outer join.
Não use um valor nulo como condição de join porque valores nulos são
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
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
SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI,
EMAIL.EMAIL_CLI
FROM CLIENTE RIGHT JOIN EMAIL
ON CLIENTE.COD_CLI =EMAIL.COD_CLI
OUTER JOIN
Banco de Dados
Autor: Nilson A. Borges 62 de 101
MICROSOFT SQL SERVER 2008
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 utilização de alias)
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
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
Uma view não pode ter um select com order by sem a clausula Top. Uma
view não recebe parâmetros de entrada.
Sintaxe:
CREATE VIEW <view_name> AS
<instrução_SELECT>
Exemplos:
Banco de Dados
Autor: Nilson A. Borges 66 de 101
MICROSOFT SQL SERVER 2008
Não pode ser usada com a opção “FOR XML” para obtenção do
resultado. Portanto, a opção “FOR XML” pode ser utilizada
apenas em stored procedures.
Banco de Dados
Autor: Nilson A. Borges 67 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 68 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 69 de 101
MICROSOFT SQL SERVER 2008
Exemplo 1:
Banco de Dados
Autor: Nilson A. Borges 70 de 101
MICROSOFT SQL SERVER 2008
Exemplo 2 :
select dbo.calcfact(5)
Banco de Dados
Autor: Nilson A. Borges 71 de 101
MICROSOFT SQL SERVER 2008
Exemplo 3:
select dbo.f_perimetro(9.5)
Banco de Dados
Autor: Nilson A. Borges 72 de 101
MICROSOFT SQL SERVER 2008
Exemplos
1) Escreva uma função que retorna todos os dados do funcionário cujo código
deve ser recebido como parâmetro.
Para testar
SELECT * FROM F_Funcionario(11)
Para testar
SELECT * FROM F_Funcionario( )
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)
Para testar
SELECT * FROM F_RendatodosCliConj()
Para testar
Banco de Dados
Autor: Nilson A. Borges 74 de 101
MICROSOFT SQL SERVER 2008
Exemplo:
Banco de Dados
Autor: Nilson A. Borges 75 de 101
MICROSOFT SQL SERVER 2008
Para testar
No exemplo estamos gerando uma tabela de juros com 240 períodos com juros
de 11%
Banco de Dados
Autor: Nilson A. Borges 76 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 77 de 101
MICROSOFT SQL SERVER 2008
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
procedure_name
Banco de Dados
Autor: Nilson A. Borges 79 de 101
MICROSOFT SQL SERVER 2008
; number
Banco de Dados
Autor: Nilson A. Borges 80 de 101
MICROSOFT SQL SERVER 2008
@ parameter
Banco de Dados
Autor: Nilson A. Borges 81 de 101
MICROSOFT SQL SERVER 2008
VARYING
DEFAULT
OUTPUT
Banco de Dados
Autor: Nilson A. Borges 82 de 101
MICROSOFT SQL SERVER 2008
READONLY
RECOMPILE
ENCRYPTION
Banco de Dados
Autor: Nilson A. Borges 83 de 101
MICROSOFT SQL SERVER 2008
EXECUTE AS
FOR REPLICATION
Banco de Dados
Autor: Nilson A. Borges 84 de 101
MICROSOFT SQL SERVER 2008
Exemplo 1:
Para Testar
Banco de Dados
Autor: Nilson A. Borges 85 de 101
MICROSOFT SQL SERVER 2008
Exemplo 2:
@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
Exemplo 3:
@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
Banco de Dados
Autor: Nilson A. Borges 86 de 101
MICROSOFT SQL SERVER 2008
Exemplo 4:
Escreva uma procedure se a soma dos salários dos funcionários for maior do
que 5000 aplique um aumento de 15,23% para todos funcionários. Caso
contrário 10,45%.
USE INFONEW
GO
ELSE
Para Testar
EXEC SP_FUNCIONARIO
Banco de Dados
Autor: Nilson A. Borges 87 de 101
MICROSOFT SQL SERVER 2008
Exemplo 5:
Escreva uma procedure se a média salarial dos funcionários for maior do que
3500 aplique um aumento de 13,3% para todos os funcionários. Caso contrário
9,4%.
USE INFONEW
ELSE
Para Testar
EXEC SP_FUNCIONARIO2
Banco de Dados
Autor: Nilson A. Borges 88 de 101
MICROSOFT SQL SERVER 2008
Exemplo 7:
Escreva uma procedure onde entre com 2 parâmetros, onde primeiro indica o
código do produto e o segundo indica o valor da porcentagem de aumento a
USE INFONEW
@COD_PROD INT,
AS
IF @PERCENT = 0 OR @COD_PROD = 0
RETURN(0)
UPDATE PRODUTO
Para Testar
Banco de Dados
Autor: Nilson A. Borges 89 de 101
MICROSOFT SQL SERVER 2008
Exemplo 8:
Escreva uma procedure onde entre com 2 parâmetros, onde primeiro indica o
sexo do cliente e o segundo indica o valor da porcentagem de aumento a
USE INFONEW
@SEXO_CLI CHAR(1),
AS
IF @PERCENT = 0
RETURN(0)
UPDATE CLIENTE
Para Testar
Banco de Dados
Autor: Nilson A. Borges 90 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 91 de 101
MICROSOFT SQL SERVER 2008
Criando um trigger
Modelo para criação de um trigger:
Banco de Dados
Autor: Nilson A. Borges 92 de 101
MICROSOFT SQL SERVER 2008
Onde:
ON - Indica a tabela ou visão 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
operações especificadas no comando de disparo forem executadas com
sucesso. Todas as ações contraints devem ter sido bem sucedidas antes de o
trigger ser executado. AFTER é padrão se apenas FOR for especificado.Os
triggers do tipo AFTER não pode ser definidos em visões;
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 não são permitidos em visões com a opção WITH
CHECK OPTION.
Banco de Dados
Autor: Nilson A. Borges 93 de 101
MICROSOFT SQL SERVER 2008
Exemplo:
DELETE ESTADO
OU
INSERT INTO ESTADO VALUES („CL‟,‟CALIFÓRNIA‟)
OU
UPDATE ESTADO
SET NOME_EST=‟COLORADO‟
WHERE SIGLA_EST= „CL‟
INSERT
UPDATE
DELETE
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 instrução que
disparou a trigger. Literalmente, a instrução é substituída pela trigger. Essa
técnica permite que façamos, por exemplo, alterações em uma tabela através
de uma view. É usado nos casos em que a view não pode alterar uma tabela
por não referenciar uma coluna com a constraint not null. Nesse caso a trigger
pode atualizar a coluna que a view não tem acesso. Dois detalhes muito
importantes sobre INSTEAD OF:
Exemplo:
Para testar
Verificar a quantidade de produtos em estoque do produto de código 1
SELECT * FROM PRODUTO
WHERE COD_PROD = 1
Banco de Dados
Autor: Nilson A. Borges 96 de 101
MICROSOFT SQL SERVER 2008
Banco de Dados
Autor: Nilson A. Borges 97 de 101
MICROSOFT SQL SERVER 2008
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
usuários. Além de ter maior controle de todos os comandos efetuados em
determinadas tabelas.
Exemplo:
USE INFONEW
GO
CREATE TRIGGER T_SEGURANCA
ON DATABASE
FOR DROP_TABLE
AS
PRINT 'PARA APAGAR TABELAS DESABILITE A TRIGGER
T_SEGURANCA'
Para testar
Banco de Dados
Autor: Nilson A. Borges 99 de 101
MICROSOFT SQL SERVER 2008
CONSIDERAÇÕES FINAIS
Banco de Dados
Autor: Nilson A. Borges 100 de
101
MICROSOFT SQL SERVER 2008
REFERÊNCIAS BIBLIOGRÁFICAS:
Ritter, Mauricio
Microsoft SQL SERVER 2008, Fundamentos de Bancos de dados – Passo a
Passo
Banco de Dados
Autor: Nilson A. Borges 101 de
101