Professor Eduardo
Professor Enildo
Adição de Comentários
 Comentários são informações que adicionamos ao
código que desenvolvemos para documentar os scripts,
permitindo que outros desenvolvedores compreendam
melhor o que escrevemos.
 No script operadores aritméticos, acrescente o seguinte
texto:
Comentários com múltiplas linhas
 Outa forma de adicionar comentários é através de
barras com asterisco, que permitem comentários com
múltiplas linhas.
 Exemplo:
Teste operacional básico
 SELECT CURRENT_TIMESTAMP;
 SELECT SUSER_SNAME();
 Para executar a instrução, use o comando de menu
Consultar/executar ou simplesmente acione a tecla de
função <F5>.
Detalhes de Painel
 Menu File:
 File/Open/File
 “Permite ao usuário abrir salvar arquivos e script, que
tem a terminação QSL”
 Object Explorer:
 Painel a esquerda da tela, mostra estrutura hierárquica
as instâncias conectadas, seus bancos de dados e suas
estruturas de tabelas, procedures e functions.
 É possível conectar diversas instâncias ao mesmo tempo
e escrever scripts, acessar objetos, desde que você tenha
as permissões.
 Editos de Querys:
 Com o botão New Query é possível abrir novas janelas
de query e também usar a combinação de atalhos
Ctrl+N.
 Database Selection:
 Um Listbox localizado na barra de botões que lista
todos os bancos de dados criados na instância, de
sistema ou criados pelo usuário.
Banco de dados do Sistema
 Na janela Object Explorer encontraremos os bancos de dados
do sistema, criados durante o processo de instalação do
produto.
 Master (registra informações de instância, login, servidores
conectados e configurações do sistema.
 Model (é utilizado como um template para a criação de outros
banco de dados.
 Msdb (armazena informações sobre agendamento de jobs e
configurações de algumas funcionalidades.
 Tempdb (armazena todos os bjetos que são criados
temporariamente.
Primeiros Scripts em T-SQL
 A linguagem Transact-SQL é uma extensão proprietária do
SQL comum desenvolvido pela Microsoft.
 Abra uma janela de query e digite o treco de código seguinte:
 Clique no botão execute ou F5.
 O SQL Server as strings são indicadas com aspas simples.
 Como salvar o Script:
 Clique no botão salvar, localizado no painel superior, a
tela para escolha do nome e da localização do arquivo
deve se abrir. Informe o nome “Script1”, selecione uma
pasta para salvar o arquivo e clique em OK.
Variáveis no T-SQL e Tipos de Dados
 Com o T-SQL é possível criar variáveis que recebem e
retornam valores, utilizando os tipos de dados disponíveis no
SQL Server. Os valores atribuídos às variáveis são
armazenados em memória, assim que a sessão é encerrada, os
dados a essas variáveis são perdidos.
 New query:
 Execute.
Tipos de variáveis
 Toda declaração de variáveis no T-SQL deve ser “tipada”,
ou seja, deve utilizar um dos tipos de dados disponíveis
no SQL Server, que são os seguintes:
Tipos numéricos exatos
Bigint
bit
decimal
int
money
numeric
smallint
smallmoney
tinyint
Tipos numéricos
aproximados
float
real
Data e hora
date
datetime2
datetime
datetimeoffset
smalldatetime
time
Cadeia de caracteres
char
text
varchar
Outros tipos de dados
Cadeia de caracteres
unicode
Cursor
nchar
SQL_variant
ntext
table
nvarchar
timestamp
hierarchyid
uniqueidentifier
xml
Binários
binary
image
varbinary
Concatenação de Strings
 Utilizando o operador de adição “+”, podemos
concatenar strings de todo tipo, como variáveis
declaradas com tipos de caracteres.
 New query
 Execute.
 Vale observar que a atribuição de calor de variáveis pode
ser feita com SET ou SELECT, levando ao mesmo
resultado. A atribuição com SET está dentro dos padrões
ANSI, mas com SELECT permite atribuição múltipla.
 New query
 Execute.
Operadores Aritméticos
 Os operadores aritméticos em T-SQT são:
operação
operador
adição
+
subtração
-
multiplicação
*
divisão
/
mod
%
 New query:
 Execute
 Obs: “AS” para definir um nome para a coluna de
resultado desta operação.
Comparadores Lógicos e Controle de Fluxo com T-SQL.
 No contexto da programação de sistemas
informatizados, controle de fluxo é a ordem em que os
comandos e instruções são executados.
 Um comando de controle de fluxo, com base em uma
condição lógica estática ou dinâmica, permite
determinar o prosseguimento de dois ou mais caminhos
possíveis do código.
Comparadores Lógicos
Operador
Descrição
>
Maior que
<
Menor que
=
Igual a
<>
Diferente de
>=
Maior ou igual a
<=
Menor ou igual a
Utilizando o IF
 É possível criar uma divisão de fluxo com base em uma condição com IF.
 New query:
Uso do WHILE
 O comando WHILE é uma estrutura de controle que, baseado em uma
condição lógica, determina a execução de uma instrução específica
repetidamente. New query:
Exemplo:
--operadores aritméticos
Realização de Operações Aritméticas Básicas
--operações aritméticas básicas
Datas com GETDATE() e CURRENT_TIMESTAMP
 A função GETDATE() e a função CURRENT_TIMESTAMP retornam a data
atual do sistema operacional em que a instância está sendo executada. As
funções não esperam nenhum argumento, e retornam como resuLtado um
valor do tipo DATETIME.
 A função pode ser executada com um simples SELECT;
 A diferença é que GETDATE() é uma extensão do T-SQL e
CURRENT_TIMESTAMP é padrão ANSI.
Conversão de tipos de Dados com CAST e CONVERT
 As funções de conversão de tipos de dados d T-SQL são
o CAST padrão ANSI e o CONVERT é uma extensão do
SQL Server.
 New Query
DECLARE
@VALOR INT
 SET @VALOR = 1000
 PRINT ‘VALOR É ‘ + @VALOR

Analisando o Erro
Erro ao executar
 Msg 245, Level 16, State 1, Line 6
 Conversion failed when converting the varchar value ‘VALOR É ‘ to data type int.
 O erro ocorreu ao tentar concatenar a string ‘VALOR É’ com a variável do
tipo inteiro @VALOR, houve um erro de conversão. Para que este trecho
funcione, é necessário converter o valor no momento da concatenação.
Altere o código da seguinte forma:
 Com o CONVERT é necessário informar primeiramente
o tipo de dados e depois o valor a ser convertido.
 Por que usar o CONVERT?
 O CONVERT permite um terceiro argumento opcional,
que é muito útil para conversão de datas.
 Em processo de integração de dados e sistemas, é
possível que datas se encontrem em formatos diversos e
a conversão em DATETIME diretamente pode não ser
possível. A função CONVERT é muito útil para estas
situações.
 New Query:
 SELECT
 CONVERT (DATETIME, ‘10/25/2025’, 101) As [mm/dd/yyyy]
 , CONVERT (DATETIME, ‘2025.10.25’, 102) As [yyyy.mm.dd]
 , CONVERT (DATETIME, ‘25/10/2025’, 103) As [dd/mm/yyyy]
 , CONVERT (DATETIME, ’25.10.2025’, 104) As [dd.mm.yyyy]
 , CONVERT (DATETIME, ’25-10-2025’, 105) As [dd-mm-yyyy]
O terceiro argumento da função CONVERT, denominado STYLE, serve
para que a função assimile o formato de entrada do segundo
argumento, possibilitando que a função execute a conversão.
Resultado
 É possível executar também o processo inverso, ou seja,
converter valores do tipo DATIME e uma cadeia de caracteres
com o formato desejado. Observe este exemplo em que se usa
a função CURRENT_TIMESTAMP que retorna a data e a hora
do servidor em que a instância está instalada.
 New Query:
 SELECT
 CONVERT (VARCHAR, CURRENT_TIMESTAMP, 101) As [mm/dd/yyyy]
 , CONVERT (VARCHAR, CURRENT_TIMESTAMP, 102) As [yyyy.mm.dd]
 , CONVERT (VARCHAR, CURRENT_TIMESTAMP, 103) As [dd/mm/yyyy]
 , CONVERT (VARCHAR, CURRENT_TIMESTAMP, 104) As [dd.mm.yyyy]
 , CONVERT (VARCHAR, CURRENT_TIMESTAMP, 105) As [dd-mm-yyyy]
Resultado
Exercício 1
 Escreva um trecho de código realizando a
multiplicação entre duas variáveis
 do tipo REAL, sendo com o valor de 8 e a outra com o
valor de 9.
 Adicione ao script um comentário com o enunciado
desta questão*
Resolução
Revisão dos Comandos SQL
 O comando para criar uma base de dados é?
CREATE DATABASE
 New Query:
 CREATE DATABASE BDEXEMPO1;
 Clique com o botão direito no
BDEXEMPLO1, no menu selecione
a opção Propriedades;
Arquivo MDF e LDF
 O arquivo MDF é utilizado para armazenar os dados
propriamente ditos, assim como as estruturas de dados. O
MDF é chamado de arquivo de BD primário.
 O LDF é o que chamamos de arquivos de log, ou o log
transacional do SQL Server. Nesse arquivo estão todas as
transações realizadas no banco de dados desde a sua
criação ou de seu último backup full até o momento atual.

O comando para excluir uma base de dados é?
 DROP DATABASE BDEXEMPLO1;
 Para que sua execução seja possível, é necessário que
o banco de dados não esteja em uso por nenhum
outro usuário no momento da intervenção.
Exercício 2
 1. Crie uma base de dados com nome de “BDProjetoTSQL”.
 2. Crie uma tabela com nome de “TBclientes”, com os




campos;
Nomecli (caracteres até 100)
Enderecocli (caracteres até 100)
Telefonecli (caracteres até 25)
Emailcli (caracteres até 100)
Resultado
Visualizando as propriedades da tabela
A procedure SP_HELP
 Outra opção para visualizar a estrutura de uma tabela
no SQL Server é executar a procedure SP_HELP, informe
entre aspas simples nome da tabela a ser analisada.
Resultado
Geração de Script de uma tabela
 Podemos gerar um script de criação de uma tabela já
existente em um banco de dados utilizando o
Management Studio.
 Expanda a aba Object Explorer até chegar à tabela que
deseja obter o script e clique com o botão direito do
mouse, no menu de contexto selecione a opção “/script
table as” / “CREATE To” / “New Query Editor Windows.
Resultado
Exercício 3
 Altere a tabela TBclientes, incluindo um campo com
nome de “DataNascimentocli” que receberá dados do
tipo data e hora.
Resultado
Alteração de tabelas com o comando ALTER TABLE
 É possível alterar tabelas, adicionando e removendo
colunas com o comando ALTER TABLE em conjunto
som os comandos ALTER COLUMN.
 Para adicionar uma nova coluna em uma tabela
existente use o comando ALTER TABLE em conjunto
com ADD.
 Para alterar uma coluna já existente em uma tabela use
o comando ALTER TABLE em conjunto com ALTER
COLUMN.
Exercício 4
 Altere o campo “DataNascimentocli” da tabela
TBclientes, para que o campo seja de preenchimento
obrigatório.
Resultado
Chaves Primárias
 Chaves primárias são colunas que possuem valores
distintos em cada linha ou registro de uma tabela.
Valores nulos também não podem estar associados a
uma coluna candidata à chave primária.
 Campos do tipo chave primária são recomendavelmente
associados a campos auto incrementais. Campos deste
tipo preenchem-se automaticamente, começando a
partir de um valor inicial, evoluindo crescentemente
através de um determinado parâmetro.
Exercício 5
 Altere a tabela TBclientes, incluindo um campo com
nome de “Codigocli” que receberá dados do tipo número
inteiro, será um campo chave primária e será auto
incremental iniciando no numero 1 e incrementando de
um em um.
Resultado
 Utilize o comando SP_HELP para conferir se o campo
foi criado corretamente.
Inserção de registros na tabela com comando INSERT
 Para inserir registros na tabela, devemos utilizar o comando
INSERT, cuja sintaxe é relativamente simples;
 INSERT INTO <nome_tabela> (campo1,campo2,campoN)

VALUE (dado1, dado2, dadoN) [;]
 Podemos inserir múltiplos registros na mesma instruções;
 INSERT INTO <nome_tabela> (campo1,campo2,campoN)

VALUE (dado1, dado2, dadoN)
, (dado1, dado2, dadoN)
, (dado1, dado2, dadoN)
, (dado1, dado2, dadoN) [;]
Exercício 6
 Insira os seguintes registros na tabela “Tbclientes”;
 1. Nome (Bill Gates), endereço (Rua da Feia, 12), telefone (2222-3333), e-
mail ([email protected]) e data de nascimento (28/10/1955);

 2. Nome ( Benjamin Franklin), endereço (Rua Só Nós Dois, 3 14) , telefone
(2222-3334) e-mail ([email protected]) edata de nascimento
(17/01/1706);
 3. Nome ( John Lennon), endereço (Rua Deus-te-guarde, 123) , telefone
(2222-3335) e-mail ([email protected]) e data de nascimento
(09/10/1940);
 4. Nome ( Thomas Edison), endereço (Largo da Boa Morte, 32) , telefone
(2222-3336) e-mail ([email protected]) e data de nascimento
(11/02/1847);
 5. Nome ( Steve Jobs), endereço (Rua Capitão da Meia-noite, 55) , telefone
(2222-3337) e-mail ([email protected]) e data de nascimento
(24/02/1955).
Exercício
 Insira os seguintes registros na tabela “Tbclientes”;
 1. Nome (Bill Gates), endereço (Rua da Feia, 12), telefone (2222-3333), e-
mail ([email protected]) e data de nascimento (28/10/1955);

 2. Nome ( Benjamin Franklin), endereço (Rua Só Nós Dois, 3 14) , telefone
(2222-3334) e-mail ([email protected]) edata de nascimento
(17/01/1906);
 3. Nome ( John Lennon), endereço (Rua Deus-te-guarde, 123) , telefone
(2222-3335) e-mail ([email protected]) e data de nascimento
(09/10/1940);
 4. Nome ( Thomas Edison), endereço (Largo da Boa Morte, 32) , telefone
(2222-3336) e-mail ([email protected]) e data de nascimento
(11/02/1847);
 5. Nome ( Steve Jobs), endereço (Rua Capitão da Meia-noite, 55) , telefone
(2222-3337) e-mail ([email protected]) e data de nascimento
(24/02/1955).
Erro
 MENSAGEM 242, Nivel 16, Estado 3, Linha 2
 A conversão de um tipo de dados varchar para um tipo de
dados datetime resultou em um valor fora do intervalo.
 A instrução foi encerrada.
Resultado
Retorno de registro com comando SELECT
 O comando SELECT retorna dados de variáveis e
strings, porém tem sua função maiores na seleção de
registros em tabelas armazenadas em bancos de dados
relacionais.
 Comando para campos específicos. Exemplo;
 Comando para todos os campos. Exemplo;
Retorno de consulta com função
 A função GETDATE(), pode ser usada em um contexto
de consulta, com outras colunas de uma query:
SELECT Codigocli, Nomecli, GETDATE() AS [Data Atual]
FROM TBclientes;
Filtro de Registro com Comando WHERE
 Podemos filtrar os registros que desejemos visualizar
com base em determinados critérios que atendem à
necessidade do negócio, utilizando o comando
WHERE. Com esse comando é possível determinar o
que desejamos visualizar, comparando os campos com
determinadas condições estabelecidas, usando os
operadores de comparação.
 Exemplo:
 SELECT Codigocli, Nomecli, Enderecocli, Telefonecli,

Emailcli,DataNascimentocli
 FROM TBclientes
 WHERE Codigocli > 3;
Exercício 7
 Realize uma consulta onde mostre o nome do cliente
com código de numero 4, e uma data limite de 30 dias a
partir da data de hoje.
Solução
 Realize uma consulta onde o mostre o nome do cliente
com código de numero 4, e uma data limite de 30 dias a
partir da data de hoje.
Operador AND
 Podemos fazer comparações mais completas, envolvendo
outros campos, usando o operador AND. Por exemplo, se
quisermos ver os clientes com o código maior que 3 e
com data de nascimento posterior ao ano de 1950:
 SELECT Codigocli, Nomecli, Enderecocli, Telefonecli,
Emailcli,DataNascimentocli
FROM TBclientes
WHERE Codigocli > 3
AND DataNascimentocli >'19500101';
Operador OR
 O comando OR permite retornar valores que satisfazem
uma ou outra condição.
 Exemplo:
 SELECT
 FROM
WHERE

OR
Codigocli, Nomecli, Enderecocli, Telefonecli,
Emailcli,DataNascimentocli
TBclientes
Codigocli > 3
DataNascimentocli >'19500101';
Operador Between
 Podemos fazer comparações de faixas de dados com
comando BEWEEEN utilizando um valor inicial e um
final de comparação. Exemplo:
SELECT
FROM
WHERE
AND
AND
*
Tbclientes
Codigocli > 1
DataNascimentocli BETWEEN '19000101'
'19850101';
Operador LIKE
 Podemos usar o operador LIKE nas consultas para
realizar pesquisas aproximadas em campos de
caracteres. Por exemplo, para consultar todos os
registros com o primeiro caractere do campo nomecli
igual a “B”:
 SELECT *

FROM TBclientes
 WHERE Nomecli LIKE 'B%';
Caractere “%”
 No script anterior foi utilizado o caractere “%”, que permite
realizar a consulta aproximada. Podemos usar o “%” para
pesquisar não apenas no começo, mas também no final da
string. Exemplo:

SELECT *

FROM TBclientes
 WHERE Nomecli LIKE '%n';
Exemplo no meio da string:
 SELECT *

FROM TBclientes
WHERE Nomecli LIKE '%m%';
Exercício 8
 Insira os dois registros abaixo no BDProjetoTSQL na
tabela TBclientes;
Nome
Endereço
Telefone
Marcelo Silva
Rua da Feia, 22
2222-3333
E-mail
Data Nasc
28/10/2000
[email protected]
Marcela Teixeira
Rua Só, 14
2222-4334
17/01/1999
[email protected]
Solução
Uso do LIKE com colchetes []
 O comando LIKE pode ser complementado com os
colchetes para pesquisas mais complexas. Por exemplo,
para consultar todos os registros de clientes que têm
como primeiro nome
, sem importar o sobrenome.
Exemplo:
SELECT *
FROM TBclientes
WHERE Nomecli LIKE 'Marcel[ao]%';
O Comando TOP
 O comando TOP permite limitar o número de registro
que serão mostrados pela instrução SELECT, a qual
recebe como argumento único o número de registros a
serem mostrados pela query. Veja exemplo do script
mostrando os dois primeiros registros da tabela:
-----------------------------------------------------------------
Exemplo com *
Ordenação dos Registros com o ORDER BY
 Para dispor os registros em uma determinada ordem, use o
comando ORDER BY. O argumento ORDER BY espera apenas
a indicação das colunas em que você deseja ordenar a seleção
desejada. Exemplo:
 Exemplo em ordem decrescente:
Atualização dos Registros com o Comando UPDATE
 O comando UPDATE permite atualizar registros em
tabelas do SGBD, alterando o valor de uma ou mais
colunas.
 Exemplo alterando os dados do cliente com o código igual
a “1”, que mudou de endereço.
Exercício 9
 Adicione um campo nomeado como “Cep” do tipo
“VARCHAR(10)” na tabela Tbclientes na base de dados
BDProjetoTSQL.
Solução
As Funções ISNULL e COALESCE
 A função ISNULL é utilizada para tratar campos com
valores “nulos”, seja em consultas ou em trechos de
códigos SQL. Veja uma consulta completa de todos as
colunas da tabela TBclientes;
Observe que a coluna Cep está com indicador “NULL” em
todos os registros da tabela, pois não contém nenhum dado.
 Para fins de relatórios e de apresentações de dados mais
finalizados, é possível trocar o indicador “NULL” por
outra mais descritivo. Exemplo podemos trocar o
indicador NULL por “Sem Cep” :
Analise as consultas abaixo
Exercício 10
 Faça uma atualização no registros do cliente com o
código “1”, inserindo no campo cep o dado “99909-303”.
Solução
 Ao executar a consulta realizada anteriormente, observe
que para o cliente com código 1, em que alteramos o valor
da coluna Cep, o valor mostrado é o da coluna.
 A função COALESCE tem o mesmo propósito da função
ISNULL, porém a função COALESCE faz parte do padrão ANSI,
ou seja, está presente em outros bancos de dados, diferentes do
ISNULL que é uma extensão do SQL Server.
 A função COALESCE tem a mesma sintaxe do ISNULL, porém
com uma diferença básica: pode receber mais de dois
parâmetros, diferente da função ISNULL que pode receber
apenas dois.
 Exemplo:
Exclusão de Registros com o comando DELETE
 Para excluir um registro que foi inserido em uma tabela
do SQL Server, devemos usar o comando DELETE que,
assim como os comandos SELECT e UPDATE, pode se
utilizar da cláusula WHERE para filtrar os dados a serem
excluídos.
 Exemplo excluindo o cliente com o código igual a sete:
 Uma questão importante quando excluímos registros de
tabelas com um campo com propriedade Identity é que,
depende dos registros que estão sendo excluídos,
podemos ter “gaps” na sequência do campo Identity.
Exercício 11
 1. Insira um novo registro com os seguintes dados:
 Nome ( Joselito Manga)
 Endereço ( Rua das Minas, 33)
 Telefone (9191-3343)
 Email ([email protected])
 Data de Nascimento ( 22/04/1990)
 2. Após inserir o registro faça uma consulta que mostre
todos os dados de todos os clientes.
Solução
 Observe que na lista de resultados temos uma lacuna
na sequência dos valores Identity.
Exclusão de Todos os Registros com o Comando
TRUNCATE TABLE
 Para excluir todos os registros de uma tabela, podemos usar o
comando DELETE sem nenhuma restrição na cláusula WHERE.
Se a tabela não possui relacionamentos e desejamos excluir
todos os registros sem nenhuma descriminação, é mais
recomendado utilizar o comando TRUNCATE TABLE, por
questões de desempenho, mas tenha muito cuidado ao utilizar
esse comando.
 Exemplo da sintaxe:
 Observação: O comando TRUNCATE TABLE exclui os
registros da tabela, porém dá um RESET na coluna Identity.
Tabelas Temporárias
Tabelas temporárias são comuns, mas existem apenas no
escopo da sessão em que foram criadas. Não estão
armazenadas fisicamente no banco de dados de maneira
definitiva.
Para criar uma tabela temporária, basta acrescentar o
prefixo “#” ao nome da tabela na sua criação.
 Observe que podemos criar essa tabela no mesmo
Database em que criamos a tabela de clientes, pois na
verdade tabelas temporárias são armazenadas no Tempdb.
 Opcionalmente, podemos criar uma tabela temporária de
outra maneira através do comando SELECT, usando a
instrução INTO. Essa técnica cria uma tabela temporária
implicitamente já com os dados da tabela preexistente,
diferente do comando CRATE TABLE que executa essa
operação de maneira explícita e “vazia”.
 Exemplo sintaxe:
O SELECT INTO permite a criação de tabelas físicas também. Basta remover o
caractere “#”.
Tabelas temporárias se dividem em dois tipos:
 Globais;
 Locais.
Tabelas locais são criadas com o caractere Sharp (“#”).
Tabelas globais são criadas com dois caractere Sharp (“##”).
Exemplo:
 SELECT *

INTO # TBClientes
 FROM TBClientes;
A criação de tabelas temporárias é muito útil para validação
de dados e realização de testes em scripts mais complexos.
Relacionamento e Integridade Referencial
 Integridade referencial é uma propriedade relacionada
aos valores de uma coluna de uma tabela de banco de
dados. Todos os valores dessa coluna têm uma
correspondência em outra coluna de outra tabela. Se
esta condição estiver satisfeita, podemos dizer que há
uma integridade referencial entre duas tabelas.
Chave Estrangeira
 Uma coluna é declarada como chave estrangeira
quando faz referência a dados de uma coluna que é
declarada chave Primária em outra tabela. A chave
Estrangeira pode conter valores nulos (ausência de
dados), porém os registros que tão preenchidos devem
ter correspondência na outra tabela.
 No caso de tentativa de exclusão de registro que são
referenciados por uma chave estrangeira, um banco de
dados relacional pode impor a integridade referencial,
impedindo a exclusão, excluindo todos os registros
relacionados ou até mesmo tornando nulas as colunas
de registros que faziam referência à chave que foi
excluída.
Verificando tabelas existente
 No SQL Server, para cada banco de dados criado em uma instância, um novo
registro na view de sistema sys.databases.
 Além de várias outras ferramentas que substituem o MS em forma gráfica
(Exemplo: SQL DBX), podemos fazer via prompt de comando ou em uma
janela de consulta.
 Exemplo de comando para verificar quais as tabelas que existem na base de
dados em uso:
 Exemplo de comando para verificar quais as tabelas existem em uma base
especifica:


Assim, basta consultar esta tabela para realizar a tarefa desejada
Exercício 12
A) Na base de dados “BDProjetoTSQL”. Realize uma consulta para verificar quais tabelas
existem.
B)Faça uma consulta para verificar todos os registros da tabela existente.
C) Inclua os seguintes registros na tabela “Existente”;
 1. Nome (Bill Gates), endereço (Rua da Feia, 12), telefone (2222-3333), e-mail
([email protected]) e data de nascimento (28/10/1955);

 2. Nome ( Benjamin Franklin), endereço (Rua Só Nós Dois, 3 14) , telefone (22223334) e-mail ([email protected]) e data de nascimento (17/01/1906);
 3. Nome ( John Lennon), endereço (Rua Deus-te-guarde, 123) , telefone (2222-3335)
e-mail ([email protected]) e data de nascimento (09/10/1940);
 4. Nome ( Thomas Edison), endereço (Largo da Boa Morte, 32) , telefone (2222-3336)
e-mail ([email protected]) e data de nascimento (11/02/1847);
 5. Nome ( Steve Jobs), endereço (Rua Capitão da Meia-noite, 55) , telefone (2222-
3337) e-mail ([email protected]) e data de nascimento (24/02/1955).
Solução
A) Na base de dados “BDProjetoTSQL”. Realize uma consulta para verificar
quais tabelas existem.
B)Faça uma consulta para verificar todos os registros da tabela existente.
C) Inclua os seguintes registros na tabela “Existente”;
D) Na base de dados “BDProjetoTSQL”.
Crie uma tabela com nome de “TBprodutos”, com os campos;




Codprod
(Int “Identity/PK”)
Descprod
(Varchar(150))
Valorprod (Numeric(18,2))
Ativo
(Bit)
Para atender ao requisito de valor padrão no campo “Ativo”,
informe a instrução default, em que será informado o valor “1”.
Exemplo de declaração default:
Campo Bit Default(1);
Solução
D) Na base de dados “BDProjetoTSQL”.
Crie uma tabela com nome de “TBprodutos”, com os campos;
Para atender ao requisito de valor padrão no campo “Ativo”, informe a instrução
default, em que será informado o valor “1”.
Exemplo de declaração default:
Campo Bit Default(1);
E) Na base de dados “BDProjetoTSQL”. Crie uma tabela com
nome de “TBvendas”, deve apresentar a seguinte estrutura;
Coluna
Tipo de dados
Descrição
Notafiscal
Int (Identity)
Codigocli
Int
Chave estrangeira da tabela TBcliente
Codigoproduto
Int
Chave estrangeira da tabela TBproduto
Datavenda
DateTime
Quantidade
Int
Valortotal
Numeric (18,2)
Chave primária da tabela
Data da venda, valor padrão, data e hora atuais
Quantidades de itens vendidos
Valor total da venda, calculado pelo
quantidade de itens, e valor de venda do
produto
Exemplo de referência de campo:
<Campo> <tipo> REFERENCES <tabela> (<campo>)
E) Na base de dados “BDProjetoTSQL”. Crie uma tabela com
nome de “TBvendas”, deve apresentar a seguinte estrutura;
Exemplo de referência de campo:
<Campo> <tipo> REFERENCES <tabela> (<campo>)
Análise de instruções
 IDENTITY, “controla a numeração automaticamente
conforme números pré-estabelecidos”.
 PRIMARY KEY, “indica um campo da tabela como
chave primária, o mesmo não irá se repetir nos outros
registros”.
 REFERENCES, “recebe como argumento a tabela e o
campo em que a respectiva chave primária (PK) foi
definida, portanto, todos os valores atribuídos à coluna
deve ter uma correspondência em outra tabela”.
 GETDATE(), “retorna a data atual do sistema
operacional em que a instância foi instalada.
CONSTRAINT
"Constraint" são objetos no banco de dados que servem
para definir sua integridade. Ou seja, são as chaves
primárias, chaves estrangeiras, chaves secundárias e
outros elementos que garantem segurança aos dados das
tabelas, evitando que sejam excluídos ou alterados
indevidamente os dados que entram em sua base.
Constraint FOREIGN KEY - FK
 Sempre que criamos uma chave estrangeira, o SQL Server
cria uma constraint para assegurar a integridade daquela
chave estrangeira. Quando criamos a chave estrangeira
de clientes na criação da tabela usando a instrução
references, a criação da constraint foi implícita com um
nome gerado automaticamente. Quando criamos com o
comando ALTER TABLE, podemos atribuir um nome
explícito a essa constraint.
 Exemplo:
Verificando a estrutura da TBvendas
Verificando as tabelas Existente na
base “BDProjetoTSQL”
 Comando para verificar quais as tabelas existem na base
de dados em uso
 SELECT * FROM information_schema.tables;
Criando um Diagrama
 Clique com o botão direito do mouse na pasta Database
Diagrams e clique na opção New Database Diagram,
 Selecione as tabelas e clique no botão “Adicionar”.
 Diagrama integridade referencial criado.
 Para melhor visualização, podemos posicionar as
ligações das tabelas.
 Realize uma consulta nas tabelas para verificar os
registros.
Exercício 13
 Insira os registros abaixo na TBprodutos da base de
dados BDProjetoTSQL. Os registros são fictícios.
Código do
Produto
Descrição
Valor
6
Tecnologia da informação
23.000,00
5
Sistemas da informação
25.000,00
9
Segurança da informação
22.000,00
10
Processamentos de dados
21.000,00
1
Ciência da computação
24.000,00
7
Física computacional
23.500,00
3
Engenharia da computação
25.000,00
4
Engenharia de software
24.000,00
8
Engenharia de sistemas
23.000,00
2
Engenharia mecatrônica
25.000,00
Solução exercício 13
Observe o resultado
Exercício 14
 Insira os registros abaixo na TBvendas da base de dados BDProjetoTSQL. Os
registros são fictícios.
Código
Cliente
Código
Produto
Data Venda
Quant.
Valor da venda
6
2
01/01/2014
1
25.000,00
2
6
01/01/2014
1
23.000,00
6
1
01/01/2014
1
24.000,00
4
4
01/01/2014
2
24.000,00
4
3
01/06/2014
1
25.000,00
3
7
01/06/2014
2
23.500,00
2
5
01/06/2014
1
25.000,00
3
10
01/06/2014
2
21.000,00
2
2
01/06/2014
1
25.000,00
4
5
01/06/2014
1
25.000,00
2
7
01/06/2014
1
23.500,00
3
4
01/06/2014
2
24.000,00
4
7
01/06/2014
1
23.500,00
Analisando solução
 A instrução INSERT em conflito com a restrição FOREIGN
KEY "FK__TBvendas__Codigo__15502E78". O conflito
ocorreu no banco de dados "BDProjetoTSQL", tabela
"dbo.TBclientes", a coluna 'Codigocli'.
A instrução foi encerrada.
Verificando TBclientes
 Erro de referência, não pode ser efetuada uma venda
para um cliente que não está cadastrado!
 Ao tentar executar o passo quatro, inserir os registros na
TBvendas, ocorre o mesmo erro. Por que?
 Se você analisou o passa três percebeu que quando
executou o comando “SELECT * FROM TBclientes” o
código 6 não existe, ou seja, ele não existe! Por tanto o
erro continua.
Possível Solução
 Tentando solucionar o problema do código do cliente,
poderíamos pensar em truncar a tabela, mas por conta
da constraint isso não é permitido.
 Obs: em um banco de produção isso nunca será uma
possível solução!
Para fins de didático vamos tentar truncar a tabela
Tbcliente para solucionar o nosso problema:
Como indica a mensagem de erro Msg 4712, o comando
TRUNCATE não pode ser executado pois existe uma
constraint “restrição” na tabela.
Como solucionar? Vamos aproveitar para treinarmos o
comando Drop.
Comando DROP
 Primeiro é preciso saber qual o nome da constrant, para
isso verificamos a estrutura da Tbvendas:
 SP_HELP TBvendas;
Sintaxe DROP constraint
 ALTER TABLE <nome_tabela>
 DROP CONSTRAINT < nome_constraint>[;]
 Após retirada da restrição o comando TRUNCATE pode ser
executado:
 Agora podemos inserir os dados novamente.
Analisando a TBclientes
 Observe o campo Codigocli. Agora os códigos 1 até 10 existem,
portanto podemos retornar ao passo quatro do exercício 14?
Não, antes devemos adicionar a restrição que foi excluída.
ADD Constraint
Sinntaxe:
ALTER TABLE <nome_tabela> ADD CONSTRAINT <nome_constraint>
FOREIGN KEY <nome_campo> REFERENCES <nome_Tabela> (<nome_campo)[;]
Verificando estrutura da tabela
Passo 4 – exercício 14
Diagrama
Criação de um campo calculado
 Campos calculados são colunas virtuais que por padrão
não estão armazenadas fisicamente no banco de dados.
Estão dispostas apenas de maneira lógica.
 Uma coluna ou campo calculado pode ter diversas
aplicações, como listar por extenso uma data ou calcular
o resultado de uma operação aritmética entre dois ou
mais campos de uma tabela. No caso da tabela
Tbvendas, um cálculo interessante é o produto da
quantidade de itens de venda e o valor da venda.
Exercício 15
 Realize uma consulta na tabela Tbvendas, mostrando
todos os campos (colunas) mais um campo calculado
com o valor total da nota, observe que a coluna deve
ser nomeada como “Total da Nota”.
Solução 15
Renomeando coluna
 Sintaxe:
 SP_RENAME <nome_tabela>.<nome_coluna_atual> ,
 <novo_nome_coluna> , ‘COLUMN’ [;]
 Para renomear objetos tipo tabela:
 SP_RENAME <nome_tabela> , <novo_nome_tabela> [;]
Exercício 16
Renomeie a coluna “Valortotalprod” para “Valor”.
Solução 16
Teoria dos conjuntos e JOINS em Banco de Dados
 O JOIN é uma cláusula da linguagem SQL que permite
criar consultas combinando resultados de uma ou duas
tabelas por meio de valores comuns entre uma ou várias
colunas de cada tabela. Quando se fala em uma tabela,
a referência é feita a casos específicas chamados SELF
JOINS, ou JOINS de uma tabela com ela mesma.
 Para entender melhor os JOINS e sua aplicação, tente
visualizar as tabelas como conjuntos e os registros
como elementos de cada um desses conjuntos. Por meio
dos JOINS podemos consultar os elementos de cada um
desses conjunto e as respectivas intersecções, uniões e
diferenças.
Comando INNER JOIN
 O padrão ANSI SQL define quatro tipos, sendo INNER,
OUTTER, LEFT e RIGHT. O INNER JOIN consulta os
registros de duas tabelas, verificando todos os registros
de cada uma selecionando os que têm valores em
comum, com base no critério estabelecido no JOIN.
INNER JOIN
 No banco de dados ProjetoTSQL, criamos três tabelas,
sendo clientes, produtos e vendas. Estabelecemos dois
relacionamentos entre clientes e Vendas, e entre
Produtos e Vendas, desta forma não é possível inserir
vendas com clientes que não existem, mas é possível
que existam clientes que não realizam vendas.
 Exemplo: (“Para listar o nome de cada cliente e a data
da venda também de cada cliente, podemos usar o
comando INNER JOIN.
Exemplo
 O INNER JOIN é considerado o tipo de JOIN “padrão”.
Podemos executar a query anterior com outra sintaxe
eliminando o INNER e obteremos o mesmo resultado.
 Com o JOIN trazendo a intersecção dos registros da
tabela Clientes (ou conjunto A) e da tabela Vendas
(conjunto B).
Comando LEFT JOIN
 O comando LEFT JOIN, entre duas tabelas hipotéticas
A e B, vai trazer todos os registros da tabela A
independente do critério estabelecido no predicado
do JOIN. Ou seja, se a tabela A contém 100 registros e
nenhum deles tem um correspondente na outra,
baseado no critério de comparação, a query ainda
assim vai trazer 100 registros, porém onde a
correspondência existir, os dados correspondentes
serão resgatados.
Exemplo
 A query apresentada vai produzir todos os registros,
mais que o resultado da query anterior. Observe que
para os clientes que não efetuaram nenhuma compra,
a coluna Datavendaprod está “nula”.
 Basicamente por meio do LEFT JOIN estamos trazendo
todos os registros da tabela Clientes, mais a intersecção
com a tabela Vendas.
Comando RIGHT JOIN
 O comando RIGHT JOIN produz um resultado semelhante ao
LEFT JOIN, porém com a inversão da comparação.
 Exemplo:
 Podemos listar a descrição de todos os produtos e a data da
venda de cada um deles junto com os produtos que não
realizaram vendas através de uma query com o comando
RIGHT JOIN .
 Observe que podemos chegar exatamente ao mesmo
resultado, usando LEFT JOIN e invertendo a posição das
tabelas.
 _______________________________________________
Comando OUTER JOIN
 As conexões externas servem para efetuar junções entre
tabelas sem que necessariamente exista entre elas uma
combinação exata. O LEFT e o RIGHT OUTER JOIN são os
componentes desse tipo de conexão. Não é obrigado o uso do
termo OUTER, se você encontrar apenas LEFT JOIN, por
exemplo, funcionará da mesma maneira.
 O OUTER JOIN pode ser utilizado quando você quiser
retornar uma lista de todos os programadores, mesmo que
estes não estejam relacionados a nenhuma linguagem de
programação. A diferença do LEFT para o RIGHT está apenas
na identificação de qual tabela da junção irá retornar todos os
dados. O mais comum é o LEFT, pois normalmente
colocamos a tabela mais importante primeiro. Inclusive a
ordem das tabelas e das cláusulas de restrições na consulta,
em alguns bancos, altera o desempenho.
Comando CROSS JOIN
 CROSS JOIN – Todos os dados da tabela à esquerda de JOIN são cruzados com
os dados da tabela à direita de JOIN por meio do CROSS JOIN, também
conhecido como produto cartesiano. É possível cruzarmos informações de duas
ou mais tabelas.

Leia mais em: Cláusulas FULL JOIN, CROSS JOIN, UPDATE e DELETE Associação de Tabelas: SQL Server 2008 - Parte 3
http://www.devmedia.com.br/clausulas-full-join-cross-join-update-e-deleteassociacao-de-tabelas-sql-server-2008-parte-3/18931#ixzz2xy2j14Hb
 http://technet.microsoft.com/pt-br/library/ms190690(v=sql.105).aspx
 http://www.sqlguides.com/sql_cross_join.php
Plano cartesiano
 Quando estudamos o plano cartesiano vimos também o conceito de par ordenado. Agora
com base nestes conceitos estudaremos o produto cartesiano.
 O produto cartesiano de dois conjuntos A e B são todos os pares ordenados (x, y), sendo
que x pertence ao conjunto A e y pertence ao conjunto B.
 Vamos tomar como exemplo os seguintes conjuntos A e B:
 Note que segundo a definição de produto cartesiano, todos os elementos
de são pares ordenados em que o primeiro elemento pertence ao
conjunto A e o segundo ao conjunto B.
 http://www.matematicadidatica.com.br/ProdutoCartesiano.aspx
Exercício
 Apresente uma consulta onde mostre os nomes dos
clientes que realizaram compras e as datas das vendas.
Solução
Comando CASE
 O comando CASE, comum em diversas linguagens de programação, avalia uma
lista de condições verificadas em um ou mais campos e retorna apenas um de
vários resultados possíveis.
 A sintaxe do CASE não é complexa. Depois do comando /case, as condições são
avaliadas uma a uma com os argumentos WHEN e THEN.
 SELECT
CASE
WHEN <Expressão lógica 1>
THEN <Resultado da expressão 1>
WHEN <Expressão lógica 2>
THEN <Resultada da expressão 2>
ELSE
<Resultado fora das condições listadas>
END
FROM
<tabela>
 Exemplo
Por meio do exemplo acima criamos uma classificação baseada
no valor de venda de cada produto. Observe que na avaliação
lógica, entre o comando WHEN e THEN, podemos ter qualquer
condição e neste exemplo foi utilizado o comparador
BETWEEN.
Agrupamento de Dados com GROUP BY
 A cláusula GROUP BY permite agrupar registros baseados
em um critério estabelecido no argumento da instrução
posicionado logo após o comando.
 Sintaxe
 SELECT <campo> FROM <tabela> GROUP BY <campo>
Exemplo
 Após o comando SELECT vejamos o tabela vendas apresentada
 Agora execute o comando com o comando GROUP BY
Exercício
 Apresente uma consulta onde mostre os nomes dos
clientes que realizaram compras e as datas das vendas,
mas se o cliente realizou mais de uma compra no
mesmo dia só deve aparecer uma vez, exemplo; o cliente
comprou no dia 01/01/2014 uma vez, mas no dia
02/02/2014 ele realizou quatro compras, nesse caso
aparecerá no nome do cliente e a data 01/01/2014 e o
nome dele com a data 02/01/2014 apenas uma vez,
informando que nesta data ele comprou.
Solução
Funções de Agregações
Uso do COUNT
A função COUNT pode ser usado para contar o número de registros
estabelecidos em uma condição GROUP BY.
Por exemplo para, contar o número de compras realizadas por cada cliente em
um determinado dia.
Estudar
 http://technet.microsoft.com/pt-br/library/ms175997.aspx
Soma de valores com
SUM
 A função SUM soma valores numéricos em um conjunto de valores
estabelecidos pelo GROUP BY. A tabela Tbvendas tem um campo
determinado “”Valor”, que armazena o valor pelo qual o produto foi
vendido.
Exemplo INNER JOIN com três tabelas
Exercício
 Realize uma consulta onde mostre o nome do cliente os
dias em que ele realizou compras, a quantidade de
produtos comprados no dia e a soma total das notas do
dia. Veja resultado abaixo.
Solução
Uso do AVG
O comando AVG permite calcular a média de valores em um
conjunto estabelecido pelo comando GROUP BY. Por exemplo,
podemos calcular a média dos valores das notas.
Uso do CAST
 Sintaxe:
 select cast(SUM(campo) as decimal(7,2))
A cláusula HAVING
 A cláusula HAVING permite filtrar resultados dos
conjuntos agregados pela condição GROUP BY.
Criação de VIEWS
 Uma VIEW é uma tabela criada “virtualmente”, através de
uma query, que define seu conteúdo e metadados. A VIEW
tem uma série de propósitos, como, por exemplos, fazer
com que todos os desenvolvedores utilizem a mesma regra
de negócio ao acessar um SET de dados ou, por questões de
segurança, limitar o acesso aos objetos propriamente ditos
para determinados usuários, delegando a eles acesso
apenas às VIEWS.
 A sintaxe para a criação da VIEW é bastante simples.
Basta utilizar o comando CREATE VIEW informando
como argumento o nome da VIEW a ser criada, o
prefixo AS e a query que definirá a consulta a ser
realizada.
 CREATE VIEW <nome_vista> AS <Instrução SQL>;
Exemplo
 Para criar uma VIEW listando apenas os contatos dos
clientes.
Consulta a View VWclientesContatos:
Consulte:
http://www.1keydata.com/pt/sql/sql-create-view.php
Criação de TRIGGERS
 Trigger, traduzindo literalmente do inglês, significa
gatilho.
 No contexto de banco de dados, trigges são
procedimentos armazenados, disparados por eventos
de atualização, exclusão ou inserção em tabelas do
SGBD.
 (UPDATE, INSERT, DELETE)
Exercício
 Criar uma tabela denominada TBprodutoHistórico, que
deve armazenar todas as alterações realizadas na tabela
Tbprodutos.
 Primeiramente vamos criar a tabela TBprodutoHistórico,
que deve ter a mesma estrutura da tabela Tbprodutos,
com um campo denominado DataAlteracao que vai
armazenar a data e hora da operação e um campo
TipoAlteracao que vai armazenar um string.
 Na atualização é preciso diferenciar os valores como
estavam antes do UPDATE e como ficaram depois do
UPDATE.
Solução
TRIGGER
 Cria um gatilho DML, DDL ou de logon. Um gatilho é
um tipo especial de procedimento armazenado que é
executado automaticamente quando um evento ocorre
no servidor de banco de dados. Os gatilhos DML são
executados quando um usuário tenta modificar dados
através de um evento DML (linguagem de manipulação
de dados). Os eventos DML são instruções INSERT,
UPDATE ou DELETE em uma tabela ou exibição. Esses
gatilhos são disparados quando qualquer evento válido
é acionado, independentemente de quaisquer linhas da
tabela serem afetadas ou não.
Seqüência para Criar uma TRIGGER
 Quando você for criar um Trigger deverá definir :
1. O nome
2. A Tabela para o qual o Trigger irá ser criado
3. Quando o Trigger deverá ser disparado
4. Os comandos que determinam qual ação o Trigger
deverá executar
Sintaxe trigger
 CREATE TRIGGER trigger_name
ON { table | view }
{
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask
)
{ comparison_operator } column_bitmask [ ...n ]
}]
sql_statement [ ...n ]
}
}
Exemplo
-- SQL Server Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table or
view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ NOT FOR
REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method
specifier [ ; ] > } <dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> :=
assembly_name.class_name.method_name
1. CREATE TRIGGER [ schema_name . ]trigger_name
 schema_name : É o nome do esquema ao qual o
gatilho DML pertence. Os gatilhos DML são
definidos no escopo do esquema da tabela ou na
exibição na qual são criados. schema_name não
pode ser especificado para gatilhos DDL ou de
logon.
 trigger_name: É o nome do gatilho. Um
trigger_name deve estar de acordo com as regras
para identificadores, a menos que trigger_name
não possa ser iniciado com # ou ##.
Exemplo
-- SQL Server Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table or
view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ NOT FOR
REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method
specifier [ ; ] > } <dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> :=
assembly_name.class_name.method_name
 2. ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]
 table | view: É a tabela ou exibição na qual o gatilho DML é
executado e às vezes referenciado como a tabela de gatilho ou
exibição de gatilho.
 A especificação do nome totalmente qualificado da tabela ou
da exibição é opcional
Exemplo
-- SQL Server Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table or
view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ NOT FOR
REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method
specifier [ ; ] > } <dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> :=
assembly_name.class_name.method_name
 3ª { FOR | AFTER | INSTEAD OF }
FOR: deve ser seguido do tipo de comando que
acionam o trigger
AFTER: determina que o trigger somente será
disparado quando todas as rotinas especificadas no
comando de disparo forem executadas com sucesso.
INSTEAD OF: Determina que o trigger será
executado ao invés do comando de disparo do
mesmo.
Exemplo
-- SQL Server Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table or
view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{[ INSERT] [,] [UPDATE] [,] [DELETE] } [NOT FOR REPLICATION ]
AS
{ sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [
; ] > } <dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> :=
assembly_name.class_name.method_name
 4. { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ NOT
FOR REPLICATION ]
 Indicam o tipo de ação que deve disparar o trigger.

NOT FOR REPLICATION permite que você especifique
que os objetos do banco de dados seguintes, sejam
tratados de forma diferente quando um agente de
replicação efetuar uma operação:
Exemplo
-- SQL Server Syntax
Trigger on an INSERT, UPDATE, or DELETE statement to a table or
view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ NOT FOR
REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method
specifier [ ; ] > } <dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> :=
assembly_name.class_name.method_name
Argumentos
 schema_name É o nome do esquema ao qual o gatilho DML
pertence. Os gatilhos DML são definidos no escopo do esquema da
tabela ou na exibição na qual são criados. schema_name não pode
ser especificado para gatilhos DDL ou de logon.
 trigger_name É o nome do gatilho. Um trigger_name deve estar de
acordo com as regras para identificadores, a menos que
trigger_name não possa ser iniciado com # ou ##.
 table | view É a tabela ou exibição na qual o gatilho DML é
executado e às vezes referenciado como a tabela de gatilho ou
exibição de gatilho. A especificação do nome totalmente
qualificado da tabela ou da exibição é opcional. Uma exibição só
pode ser referenciada por um gatilho INSTEAD OF. Gatilhos DML
não podem ser definidos em tabelas temporárias locais ou globais.
 DATABASE Aplica o escopo de um gatilho DDL ao banco de dados
atual. Se for especificado, o gatilho será acionado sempre que
event_type ou event_group ocorrer no banco de dados atual.
 ALL SERVER Aplica o escopo de um gatilho DDL ou de logon ao servidor






atual. Se for especificado, o gatilho será acionado sempre que event_type
ou event_group ocorrer em qualquer local no servidor atual.
WITH ENCRYPTION Ofusca o texto da instrução CREATE TRIGGER. O
uso de WITH ENCRYPTION impede que o gatilho seja publicado como
parte da replicação do SQL Server. WITH ENCRYPTION não pode ser
especificado para gatilhos CLR.
EXECUTE ASE especifica o contexto de segurança no qual o gatilho é
executado. Permite controlar a conta de usuário que a instância do SQL
Server usa para validar permissões em quaisquer objetos do banco de
dados referidos pelo gatilho.
FOR | AFTER AFTER especifica que o gatilho DML é disparado apenas
quando todas as operações especificadas na instrução SQL de gatilho são
executadas com êxito. Todas as verificações de restrição e ações
referenciais em cascata também devem obter êxito para que este gatilho
seja disparado.
AFTER é o padrão quando FOR é a única palavra-chave especificada.
Gatilhos AFTER não podem ser definidos em exibições.
INSTEAD OF Especifica que o gatilho DML será executado em vez da
instrução SQL de gatilho, substituindo assim as ações das instruções de
gatilho. INSTEAD OF não pode ser especificado para gatilhos DDL ou de
logon.
 No máximo, um gatilho INSTEAD OF por instrução INSERT, UPDATE ou DELETE





pode ser definido em uma tabela ou exibição. Entretanto, você pode definir
exibições sobre exibições, onde cada uma tem seu próprio gatilho INSTEAD OF.
Os gatilhos INSTEAD OF não são permitidos em exibições atualizáveis que usam
WITH CHECK OPTION. O SQL Server gera um erro quando um gatilho INSTEAD
OF é adicionado a uma WITH CHECK OPTION de exibição atualizável
especificado. O usuário deve remover essa opção usando ALTER VIEW antes de
definir o gatilho INSTEAD OF.
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } Especifica as instruções de
modificação de dados que, quando tentadas nessa tabela ou exibição, ativam o
gatilho DML. É necessário especificar pelo menos uma opção. É permitida qualquer
combinação dessas opções em qualquer ordem na definição do gatilho.
Para gatilhos INSTEAD OF, a opção DELETE não é permitida em tabelas que
tenham um relacionamento referencial que especifique uma ação ON DELETE em
cascata. Da mesma maneira, a opção UPDATE não é permitida em tabelas que
tenham um relacionamento referencial que especifique uma ação ON UPDATE em
cascata.
event_type É o nome de um evento da linguagem Transact-SQL que, após a
execução, faz com que um gatilho DDL seja acionado.
event_group É o nome de um agrupamento predefinido de eventos da linguagem
Transact-SQL. O gatilho DDL será acionado após a execução de qualquer evento da
linguagem Transact-SQL que pertença ao event_group.
 Depois da conclusão de ALTER TRIGGER, event_group também atuará como




uma macro por meio da adição dos tipos de evento que ele abrange à exibição
do catálogo sys.trigger_events.
NOT FOR REPLICATION Indica que o gatilho não deve ser executado
quando um agente de replicação modificar a tabela envolvida no gatilho.
sql_statement São as condições e as ações do gatilho. As condições de gatilho
especificam critérios adicionais que determinam se os eventos DML, DDL ou
de logon fazem com que as ações de gatilho sejam executadas.
As ações de gatilho especificadas nas instruções Transact-SQL entram em
vigor quando a operação é tentada.
Os gatilhos podem incluir qualquer número e tipo de instruções TransactSQL, com exceções. Para obter mais informações, consulte Comentários. Um
gatilho é criado para verificar ou alterar dados com base em uma instrução de
definição ou modificação de dados. Ele não deve retornar dados ao usuário.
Os gatilhos DML usam as tabelas lógicas (conceituais) deleted e inserted.
Eles são estruturalmente semelhantes à tabela na qual o gatilho é definido,
ou seja, a tabela na qual a ação do usuário é tentada. As tabelas deleted e
inserted contêm os valores antigos ou novos das linhas que podem ser
alteradas pela ação do usuário.
Consulte
http://msdn.microsoft.com/pt-br/library/ms178110.aspx
http://technet.microsoft.com/ptbr/library/ms187940.aspx
http://www.devmedia.com.br/login-e-permissoespermissoes-no-sql-server-2008-r2/24180
http://msdn.microsoft.com/pt-br/library/ms189799.aspx
Criando uma Trigger
para armazenar as atualizações
Exercício
 1. Faça uma atualização na Tbprodutos alterando a
descrição do produto ‘Ciência da Computação’ para
‘Bacharel em Ciência da Computação’.
 2. Faça uma consulta na TBprodutoHistorico e descreva
o resultado obtido.
Solução
EXERCÍCIO
 1. Criar uma tabela denominada TBclienteHistórico, que
deve armazenar todas as alterações, inclusões e
exclusões realizadas na tabela TBclientes.
 Primeiramente vamos criar a tabela TBclienteHistórico,
que deve ter a mesma estrutura da tabela TBclientes, com
um campo denominado DataAlteracao que vai
armazenar a data e hora da operação e um campo
TipoAlteracao que vai armazenar um string.
 Na atualização é preciso diferenciar os valores como
estavam antes do UPDATE e como ficaram depois do
UPDATE.
2. Crie um gatilho para essa função.
FIM