A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

TLBD 3 Técnicas de linguagem de banco de dados 3

Apresentações semelhantes


Apresentação em tema: "TLBD 3 Técnicas de linguagem de banco de dados 3"— Transcrição da apresentação:

1 TLBD 3 Técnicas de linguagem de banco de dados 3
Professor Eduardo Professor Enildo

2 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:

3 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:

4 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>.

5 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.

6 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.

7 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.

8 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.

9 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.

10 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.

11 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 aproximados float real Tipos numéricos exatos Bigint bit decimal int money numeric smallint smallmoney tinyint Data e hora date datetime2 datetime datetimeoffset smalldatetime time

12 Cadeia de caracteres char text varchar Outros tipos de dados Cursor hierarchyid SQL_variant table timestamp uniqueidentifier xml Cadeia de caracteres unicode nchar ntext nvarchar Binários binary image varbinary

13 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.

14 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.

15 Operadores Aritméticos
Os operadores aritméticos em T-SQT são: operação operador adição + subtração - multiplicação * divisão / mod %

16 New query: Execute Obs: “AS” para definir um nome para a coluna de resultado desta operação. Última aula 04/02/ próxima aula 11/02/2014

17 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.

18 Comparadores Lógicos Operador Descrição > Maior que < Menor que
Maior que Menor que = Igual a <>  Diferente de >= Maior ou igual a <= Menor ou igual a

19 Utilizando o IF É possível criar uma divisão de fluxo com base em uma condição com IF. New query:

20 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:

21 Exemplo: --operadores aritméticos

22 Realização de Operações Aritméticas Básicas

23 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.

24 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 = 1000 PRINT ‘VALOR É ‘

25 Analisando o Erro

26 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 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: Última aula 11/02/ próxima aula 18/02/2014

27 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.

28 New Query: SELECT CONVERT (DATETIME, ‘10/25/2025’, 101) As [mm/dd/yyyy] , CONVERT (DATETIME, ‘ ’, 102) As [yyyy.mm.dd] , CONVERT (DATETIME, ‘25/10/2025’, 103) As [dd/mm/yyyy] , CONVERT (DATETIME, ’ ’, 104) As [dd.mm.yyyy] , CONVERT (DATETIME, ’ ’, 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.

29 Resultado

30 É 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]

31 Resultado

32 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*

33 Resolução

34 Revisão dos Comandos SQL
O comando para criar uma base de dados é?

35 CREATE DATABASE New Query: CREATE DATABASE BDEXEMPO1;
Clique com o botão direito no BDEXEMPLO1, no menu selecione a opção Propriedades;

36

37 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.

38 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.

39 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) cli (caracteres até 100)

40 Resultado

41 Visualizando as propriedades da tabela

42 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.

43 Resultado

44 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.

45

46 Resultado

47 Exercício 3 Altere a tabela TBclientes, incluindo um campo com nome de “DataNascimentocli” que receberá dados do tipo data e hora.

48 Resultado

49 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.

50 Exercício 4 Altere o campo “DataNascimentocli” da tabela TBclientes, para que o campo seja de preenchimento obrigatório.

51 Resultado

52 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.

53 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.

54 Resultado Utilize o comando SP_HELP para conferir se o campo foi criado corretamente.

55 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; VALUE (dado1, dado2, dadoN) , (dado1, dado2, dadoN) , (dado1, dado2, dadoN) [;]

56 Exercício 6 Insira os seguintes registros na tabela “Tbclientes”;
1. Nome (Bill Gates), endereço (Rua da Feia, 12), telefone ( ), e data de nascimento (28/10/1955); 2. Nome ( Benjamin Franklin), endereço (Rua Só Nós Dois, 3 14) , telefone ( ) edata de nascimento (17/01/1706); 3. Nome ( John Lennon), endereço (Rua Deus-te-guarde, 123) , telefone ( ) e data de nascimento (09/10/1940); 4. Nome ( Thomas Edison), endereço (Largo da Boa Morte, 32) , telefone ( ) e data de nascimento (11/02/1847); 5. Nome ( Steve Jobs), endereço (Rua Capitão da Meia-noite, 55) , telefone ( ) e data de nascimento (24/02/1955).

57 Exercício Insira os seguintes registros na tabela “Tbclientes”;
1. Nome (Bill Gates), endereço (Rua da Feia, 12), telefone ( ), e data de nascimento (28/10/1955); 2. Nome ( Benjamin Franklin), endereço (Rua Só Nós Dois, 3 14) , telefone ( ) edata de nascimento (17/01/1906); 3. Nome ( John Lennon), endereço (Rua Deus-te-guarde, 123) , telefone ( ) e data de nascimento (09/10/1940); 4. Nome ( Thomas Edison), endereço (Largo da Boa Morte, 32) , telefone ( ) e data de nascimento (11/02/1847); 5. Nome ( Steve Jobs), endereço (Rua Capitão da Meia-noite, 55) , telefone ( ) e data de nascimento (24/02/1955).

58 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.

59 Resultado

60 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;

61 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;

62 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, cli,DataNascimentocli FROM TBclientes WHERE Codigocli > 3;

63 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.

64 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.

65 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, cli,DataNascimentocli FROM TBclientes WHERE Codigocli > 3 AND DataNascimentocli >' ';

66 Operador OR O comando OR permite retornar valores que satisfazem uma ou outra condição. Exemplo: SELECT Codigocli, Nomecli, Enderecocli, Telefonecli, cli,DataNascimentocli FROM TBclientes WHERE Codigocli > 3 OR DataNascimentocli >' ';

67 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 Tbclientes WHERE Codigocli > 1 AND DataNascimentocli BETWEEN ' ' AND ' ';

68 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%';

69 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: WHERE Nomecli LIKE '%m%';

70 Exercício 8 Insira os dois registros abaixo no BDProjetoTSQL na tabela TBclientes; Nome Endereço Telefone Data Nasc Marcelo Silva Rua da Feia, 22 28/10/2000 Marcela Teixeira Rua Só, 14 17/01/1999

71 Solução

72 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]%';

73 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:

74 Exemplo com *

75 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:

76 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. PRÓXIMA AULA 11/03/2014

77 Exercício 9 Adicione um campo nomeado como “Cep” do tipo “VARCHAR(10)” na tabela Tbclientes na base de dados BDProjetoTSQL.

78 Solução

79 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.

80 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” :

81 Analise as consultas abaixo

82 Exercício 10 Faça uma atualização no registros do cliente com o código “1”, inserindo no campo cep o dado “ ”.

83 Solução

84 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.

85 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:

86 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:

87 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.

88 Exercício 11 1. Insira um novo registro com os seguintes dados:
Nome ( Joselito Manga) Endereço ( Rua das Minas, 33) Telefone ( ) 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.

89 Solução Observe que na lista de resultados temos uma lacuna na sequência dos valores Identity.

90 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.

91 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.

92 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:

93 O SELECT INTO permite a criação de tabelas físicas também
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.

94 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. PRÓXIMO 15/03/2014

95 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.

96 Verificando tabelas existente

97 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

98 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 ( ), e data de nascimento (28/10/1955); 2. Nome ( Benjamin Franklin), endereço (Rua Só Nós Dois, 3 14) , telefone ( ) e data de nascimento (17/01/1906); 3. Nome ( John Lennon), endereço (Rua Deus-te-guarde, 123) , telefone ( ) e data de nascimento (09/10/1940); 4. Nome ( Thomas Edison), endereço (Largo da Boa Morte, 32) , telefone ( ) e data de nascimento (11/02/1847); 5. Nome ( Steve Jobs), endereço (Rua Capitão da Meia-noite, 55) , telefone ( ) e data de nascimento (24/02/1955).

99 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”;

100 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);

101 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);

102 Exemplo de referência de 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>) Coluna Tipo de dados Descrição Notafiscal Int (Identity) Chave primária da tabela Codigocli Int Chave estrangeira da tabela TBcliente Codigoproduto Chave estrangeira da tabela TBproduto Datavenda DateTime Data da venda, valor padrão, data e hora atuais Quantidade Quantidades de itens vendidos Valortotal Numeric (18,2) Valor total da venda, calculado pelo quantidade de itens, e valor de venda do produto PRÓXIMO 18/03/2014

103 E) Na base de dados “BDProjetoTSQL”
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>)

104 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.

105 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.

106 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:

107 Verificando a estrutura da TBvendas

108 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;

109 Criando um Diagrama Clique com o botão direito do mouse na pasta Database Diagrams e clique na opção New Database Diagram,

110 Selecione as tabelas e clique no botão “Adicionar”.

111 Diagrama integridade referencial criado.
Para melhor visualização, podemos posicionar as ligações das tabelas.

112 Realize uma consulta nas tabelas para verificar os registros.

113 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 4 Engenharia de software 8 Engenharia de sistemas 2 Engenharia mecatrônica

114 Solução exercício 13

115 Observe o resultado

116 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 23.000,00 24.000,00 4 3 01/06/2014 7 23.500,00 5 10 21.000,00

117 Analisando solução

118

119 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.

120 Verificando TBclientes
Erro de referência, não pode ser efetuada uma venda para um cliente que não está cadastrado!

121

122 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.

123 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!

124 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.

125 Comando DROP Primeiro é preciso saber qual o nome da constrant, para isso verificamos a estrutura da Tbvendas: SP_HELP TBvendas;

126 Sintaxe DROP constraint
ALTER TABLE <nome_tabela> DROP CONSTRAINT < nome_constraint>[;]

127 Após retirada da restrição o comando TRUNCATE pode ser executado:
Agora podemos inserir os dados novamente.

128 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.

129 ADD Constraint Sinntaxe:
ALTER TABLE <nome_tabela> ADD CONSTRAINT <nome_constraint> FOREIGN KEY <nome_campo> REFERENCES <nome_Tabela> (<nome_campo)[;]

130 Verificando estrutura da tabela

131 Passo 4 – exercício 14

132 Diagrama

133

134 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.

135 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”.

136 Solução 15

137 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> [;]

138 Exercício 16 Renomeie a coluna “Valortotalprod” para “Valor”.

139 Solução 16

140 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.

141 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.

142 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.

143

144 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).

145 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.

146 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”.

147 Basicamente por meio do LEFT JOIN estamos trazendo todos os registros da tabela Clientes, mais a intersecção com a tabela Vendas.

148 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 .

149

150 Observe que podemos chegar exatamente ao mesmo resultado, usando LEFT JOIN e invertendo a posição das tabelas. _______________________________________________

151 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.

152 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 Parte 3

153 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.

154

155 Exercício Apresente uma consulta onde mostre os nomes dos clientes que realizaram compras e as datas das vendas.

156 Solução

157 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>

158 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.

159 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>

160 Exemplo Após o comando SELECT vejamos o tabela vendas apresentada
Agora execute o comando com o comando GROUP BY

161 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.

162 Solução

163 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.

164 Estudar

165 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.

166 Exemplo INNER JOIN com três tabelas

167 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.

168 Solução

169 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.

170 Uso do CAST Sintaxe: select cast(SUM(campo) as decimal(7,2))

171 A cláusula HAVING A cláusula HAVING permite filtrar resultados dos conjuntos agregados pela condição GROUP BY.

172 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.

173 A sintaxe para a criação da VIEW é bastante simples
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>;

174 Exemplo Para criar uma VIEW listando apenas os contatos dos clientes.

175 Consulta a View VWclientesContatos:
Consulte:

176 (UPDATE, INSERT, DELETE)
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)

177 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.

178 Solução

179 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.

180 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

181 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 ] } }

182 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

183 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 ##.

184 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

185 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

186 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

187 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.

188 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

189 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:

190 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

191 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.

192 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.

193 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.

194 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 Transact-SQL, 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.

195 Consulte http://msdn.microsoft.com/pt-br/library/ms178110.aspx

196 Criando uma Trigger para armazenar as atualizações

197 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.

198 Solução

199 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.

200 FIM


Carregar ppt "TLBD 3 Técnicas de linguagem de banco de dados 3"

Apresentações semelhantes


Anúncios Google