SGBD é a sigla para Sistema Gerenciador de Banco de Dados, um conjunto de programas que permitem gerir bases de dados. O SGBD é uma ferramenta fundamental para a gestão de dados de empresas e organizações
Semelhante a SGBD é a sigla para Sistema Gerenciador de Banco de Dados, um conjunto de programas que permitem gerir bases de dados. O SGBD é uma ferramenta fundamental para a gestão de dados de empresas e organizações
SGBD é a sigla para Sistema Gerenciador de Banco de Dados, um conjunto de programas que permitem gerir bases de dados. O SGBD é uma ferramenta fundamental para a gestão de dados de empresas e organizações
Visão geral
Oque é o SQL Server?
Integração do SQL Server
Bases de dados do SQL Server
Segurança do SQL Server
Trabalhando com o SQL Server
3.
O queé o SQL Server?
Introdução ao SQL Server
Componentes cliente-servidor
Processo de comunicação cliente-servidor
Serviços do SQL Server
4.
Introdução ao SQLServer
Sistema de gestão de bases
de dados relacionais
SQL Server
Cliente
Resultados
Aplicação cliente
OLAP
OLTP
Consulta
5.
Componentes cliente-servidor
Aplicação cliente
Net-Librarydo cliente
Cliente
SQL Server
Servidor
Base de
dados local
API de bases de dados
(OLE DB, ODBC,
DB-Library)
Processador
Memória
Mecanismo
relacional
Mecanismo de
armazenamento
Open Data Services
Net-Libraries
do servidor
6.
Aplicação cliente
Net-Library
do cliente
Cliente
Basede
dados local
API de base
de dados
(OLE DB, ODBC,
DB-Library)
Memória
Processo de comunicação cliente-servidor
Conjunto de
resultados
1
2
Consulta
SQL Server
Mecanismo
relacional
Mecanismo de
armazenamento
Servidor
ODS
Net-Libraries
do servidor
Consulta Conjunto de
resultados
3
4
5
Processador
7.
Serviços do SQLServer
Microsoft Distributed
Transaction
Coordinator
Serviço
MSSQLServer
Serviço
SQLServerAgent
Microsoft Search
Servidor
Gestão de dados
Processamento de
transacções e pesquisas
Integridade dos dados
Trabalhos
Alertas
Operadores
Catálogos de texto
Índices de texto
Gestão de
transacções distribuídas
8.
Integração doSQL Server
Integrando o SQL Server com sistemas operativos
Integrando o SQL Server com o Windows 2000
Integrando o SQL Server com outras aplicações de
servidor da Microsoft
9.
Integrando o SQLServer com sistemas operativos
Navegadores
Windows 2000 Windows 98
Cliente
Servidor
Windows 2000 Windows NT
Windows Me,
98 e 95
Outro
fabricante
Windows NT
Internet
Internet
Windows Me Windows CE
10.
Integrando o SQLServer com o Windows 2000
Active Directory
Segurança
Suporte a vários processadores
Microsoft Event Viewer
Component Services do Windows 2000
System Monitor do Windows 2000
Microsoft Internet Information Services
Windows Clustering
11.
Integrando o SQLServer com outras aplicações
de servidor da Microsoft
Host IBM
Microsoft Windows 2000 Server
com soluções de aumento de
desempenho (SA) para o
Internet Storefront
Microsoft Host
Integration Server 2000
Dados e
aplicações
Microsoft Systems
Management Server
Microsoft
Exchange
Server
SQL Server
Internet
Internet
12.
Bases dedados do SQL Server
Tipos de bases de dados
Objectos de bases de dados
Fazendo referência aos objectos do SQL Server
Tabelas do sistema
Recuperação de metadados
13.
Tipos de basesde dados
Bases de dados de sistema
Bases de dados de utilizador
master
master
model
model tempdb
tempdb msdb
msdb
pubs
pubs Northwind
Northwind User1
User1
distribution
distribution
Fazendo referência aosobjectos do SQL Server
Nomes totalmente qualificados
servidor.base_de_dados.proprietário.objeto
Nomes especificados parcialmente
O servidor padrão é a ocorrência actual no servidor local
A base de dados padrão é a base de dados actual
O proprietário padrão é o nome do utilizador contido na
base de dados
CREATE TABLE Northwind.dbo.OrderHistory
.
.
.
16.
Tabelas do sistema
As tabelas do sistema armazenam informações
(metadados) sobre o sistema e objectos de
base de dados
O catálogo da base de dados armazena metadados
sobre uma base de dados específica
O catálogo do sistema armazena metadados sobre o
sistema inteiro e todos as outras bases de dados
17.
Recuperação de metadados
Procedimentos armazenados do sistema
Funções do sistema e dos metadados
Views do esquema de informações
EXEC sp_help Employees
SELECT USER_NAME(10)
SELECT * FROM INFORMATION_SCHEMA.TABLES
18.
Segurança doSQL Server
Autenticação de login
Contas de utilizador e cargos do base de dados
Tipos de cargos
Validação de permissões
19.
Autenticação de login
AUTENTICAÇÃO
OSQL Server
verifica a conexão
confiável
O SQL Server
verifica o nome
e a senha
OU
SQL
Server
Utilizador ou grupo
do Windows 2000 Windows 2000
Conta de login do
SQL Server
20.
Contas de utilizadore cargos da base de dados
O SQL Server atribui
logins a contas de
utilizadores e cargos
Utilizador da
base de dados
Cargo de
base de dados
Utilizador ou grupo
do Windows 2000
Conta de login
do SQL Server
O SQL Server
verifica a
conexão confiável
O SQL Server
verifica o nome
e a senha
SQL
Server
Windows
2000
OU
21.
Tipos de cargos
Cargos fixos de servidor
Grupos de privilégios administrativos no nível
do servidor
Cargos fixos de base de dados
Grupos de privilégios administrativos no nível da
base de dados
Cargos de base de dados definidos pelo utilizador
Representam o trabalho executado por um grupo
de funcionários de sua organização
22.
O SQL Server
verificaas
permissões
Validação de permissões
Permissões OK;
o comando é
executado
Permissões não OK;
retorno de Erro
2 3
SELECT * FROM Members
O utilizador da base
de dados executa
o comando
1
23.
Trabalhando como SQL Server
Administrando uma base de dados do SQL Server
Implementando uma base de dados do SQL Server
Seleccionando uma arquitectura de aplicação para
o SQL Server
Criando aplicações com APIs de base de dados
24.
Administrando uma basede dados do SQL Server
Tarefas administrativas comuns
SQL Server Enterprise Manager
Assistentes e ferramentas de administração
do SQL Server
Ferramentas de gestão do prompt de
comando do SQL Server
Help e Books Online do SQL Server
25.
Implementando uma basede dados do SQL Server
Criando a base de dados
Criando a base de dados e seus objectos
Testando e ajustando a aplicação e a base de dados
Planeando a implementação
Criando aplicações comAPIs de base de dados
Interfaces
de objectos
de dados
Application
Programming
Interfaces
ADO
OLE DB
Outras fontes
de dados
Bases de
dados
relacionais
Visão geral
Criandoa arquitectura de aplicações empresariais
Ferramentas de programação do SQL Server
Linguagem de programação Transact-SQL
Elementos do Transact-SQL
Outros elementos de linguagem
Maneiras de executar as instruções Transact-SQL
32.
Criando aarquitetura de aplicativos empresariais
Identificando camadas lógicas
Criando camadas físicas
Acedendo a dados
33.
Identificando camadas lógicas
Camadade
apresentação
de dados
Aplicações
personalizadas
do Windows
Navegadores da
Web
Camada lógica
de aplicação
Componentes
personalizados
Aplicações e serviços
integrados
Regras comerciais
Regras de dados
Camada de
serviços
de dados
Lógica de acesso
a dados
Armazenamento
de dados
34.
Criando camadas físicas
Serviçosde dados
Apresentação de dados
Serviços de dados
Lógica de aplicação
Apresentação de dados
IIS Componentes
Modelo de duas camadas
Modelo de várias camadas
Lógica de aplicativo
35.
Acedendo a dados
Aplicaçõese componentes Navegador
IIS
ActiveX Data Objects
Consumidores
de dados
Fornecedor
de dados
Access Excel
Cliente
personalizado
Fornecedores de dados OLE DB (serviços)
Cursores
Processadores
de consulta
Serviços
comerciais
Fornecedores de dados OLE DB (dados)
ODBC Exchange
Active
Directory
Jet
SQL Server Excel
Outros fornecedores
OLE DB
36.
Ferramentas de programaçãodo SQL Server
SQL Query Analyzer
Efectua a sintaxe de codificação por cores
automaticamente
Várias janelas de consulta
Visualizações personalizáveis de conjuntos de
resultados
Planos gráficos de execução
Executa partes de scripts
Utilitário osql
Utilitário de linha de comando
37.
Linguagem de programaçãoTransact-SQL
Implementação do padrão ISO ANSI-SQL no SQL Server
Pode ser executada em qualquer produto compatível
com nível de entrada
Contém funcionalidade exclusiva adicional
38.
Elementos doTransact-SQL
Instruções de Data Control Language
Instruções de Data Definition Language
Instruções de Data Manipulation Language
Nomes de objectos do SQL Server
Orientações de nomeação
39.
Instruções de DataControl Language
Definem ou alteram permissões
GRANT
DENY
REVOKE
Por omissão, somente os participantes do cargo
sysadmin, dbcreator, db_owner ou db_securityadmin
podem executar
40.
Instruções de DataDefinition Language
Definem os objectos da base de dados
CREATE tipo_de_objeto nome_do_objeto
ALTER tipo_de_objeto nome_do_objeto
DROP tipo_de_objeto nome_do_objeto
41.
Instruções de DataManipulation Language
Operam com os dados contidos na base de dados
SELECT
INSERT
UPDATE
DELETE
42.
Nomes de objectosdo SQL Server
Identificadores padrão
O primeiro carácter deve ser um carácter alfabético
Outros caracteres podem incluir letras, números ou
símbolos
Os nomes de identificadores que começam com um
símbolo têm utilizações especiais
Identificadores delimitados
Use quando os nomes contiverem espaços
incorporados
Use quando palavras reservadas forem partes de
nomes
Delimite-os por parêntesis rectos ([ ]) ou
aspas duplas (" ")
43.
Orientações de nomeação
Quando possível, usar nomes significativos
Manter nomes curtos
Usar convenções de nomeação simples e claras
Escolher um identificador que diferencie tipos de
objecto
Views
Procedimentos armazenados
Manter a exclusividade dos nomes de objectos e
utilizadores
44.
Outros elementosde linguagem
Variáveis locais
Operadores
Funções
Exemplos de funções
Elementos de linguagem de controle de fluxo
Comentários
45.
Variáveis locais
Definidaspelo utilizador com a instrução DECLARE
Recebem valores através de uma instrução SET ou
SELECT
USE Northwind
DECLARE @vLastName char(20),
@vFirstName varchar(11)
SET @vLastName = 'Dodsworth'
SELECT @vFirstName = FirstName
FROM Northwind..Employees
WHERE LastName = @vLastName
PRINT @vFirstName + ' ' + @vLastName
GO
46.
Operadores
Tipos deoperadores
Aritmético
Comparação
Concatenação de sequências de caracteres
Lógico
Níveis de precedência dos operadores
47.
Funções
Funções agregadas
Funções escalares
Funções de conjunto de registros
SELECT *
FROM OPENQUERY
(OracleSvr, 'SELECT ENAME, EMPNO FROM SCOTT.EMP')
SELECT AVG (UnitPrice) FROM Products
SELECT DB_NAME() AS 'database'
48.
Exemplos de funções
SELECT'ANSI:' AS Region,
CONVERT(varchar(30), GETDATE(), 102) AS Style
UNION
SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)
UNION
SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)
Resultado
ANSI:
European:
Japanese:
Style
1
1
2000.03.22
22 Mar 2000 14:20:00:010
2000/03/22
Region
49.
Elementos de linguagemde controle de fluxo
Nível de instrução
Blocos BEGIN…END
Blocos IF…ELSE
Construções com WHILE
Nível de registro
Expressão CASE
IF USER_NAME() <> 'dbo'
BEGIN
RAISERROR('Must be sysadmin
to Perform Operation',
10, 1)
RETURN
END
ELSE
DBCC CHECKDB(Northwind)
50.
Comentários
Comentários emlinha
Comentários em bloco
SELECT ProductName
,(UnitsInStock + UnitsOnOrder) AS Max -- Calcula o inventário
, SupplierID
FROM Products
/*
** Este código recupera todos os registros da tabela products
** e exibe o preço unitário, o preço unitário com aumento
** de 10% e o nome do produto.
*/
SELECT UnitPrice, (UnitPrice * 1.1), ProductName
FROM Products
51.
Maneiras deexecutar as instruções Transact-SQL
Construindo instruções de forma dinâmica
Usando lotes (batches)
Usando scripts
Usando transacções
Usando a Extensible Markup Language
52.
Construindo instruções deforma dinâmica
Use EXECUTE com literais e variáveis de sequências de
caracteres
Use quando for necessário atribuir o valor da variável
em tempo de execução
As variáveis e tabelas temporárias permanecerão
somente durante a execução
DECLARE @dbname varchar(30), @tablename varchar(30)
SET @dbname = 'Northwind'
SET @tablename = 'Products'
EXECUTE
('USE' + @dbname + 'SELECT * FROM' + @tablename)
53.
Usando lotes
Umaou mais instruções Transact-SQL
submetidas em conjunto
Definir um lote com a instrução GO
Como o SQL Server processa lotes
Instruções que você não pode combinar em um lote
CREATE PROCEDURE
CREATE VIEW
CREATE TRIGGER
CREATE RULE
CREATE DEFAULT
54.
Usando scripts
Contêminstruções gravadas
Podem ser escritos em qualquer editor de texto
Grave usando a extensão de nome de arquivo .sql
São executados no SQL Query Analyzer ou no
utilitário osql
Use para a recriação de objectos de bases de dados
ou para executar instruções várias vezes
55.
Usando transações
Processadascomo um lote
Integridade de dados garantida
Alterações na base de dados são aplicadas juntas ou
desfeitas
BEGIN TRANSACTION
UPDATE savings SET balance = (amount - 100)
WHERE custid = 78910
… <Rollback transaction if error>
UPDATE checking SET balance = (amount + 100)
WHERE custid = 78910
… <Rollback transaction if error>
COMMIT TRANSACTION
56.
Usando a ExtensibleMarkup Language
Permitindo que um navegador cliente formate dados
Especificando a opção FOR XML AUTO
Especificando a opção FOR XML RAW
Identificando limitações na utilização da cláusula
FOR XML
57.
Práticas recomendadas
Use asintaxe do ANSI SQL
Use a sintaxe do ANSI SQL
Mantenha a lógica comercial no servidor como procedimentos
armazenados
Mantenha a lógica comercial no servidor como procedimentos
armazenados
Salve as instruções como scripts e faça um comentário
completo delas
Salve as instruções como scripts e faça um comentário
completo delas
Formate as instruções Transact-SQL de modo que os
outros utilizadores as consigam ler
Formate as instruções Transact-SQL de modo que os
outros utilizadores as consigam ler
Escolha uma convenção de nomeação adequada
Escolha uma convenção de nomeação adequada
Revisão
Criando aarquitectura de aplicações empresariais
Ferramentas de programação do SQL Server
Linguagem de programação Transact-SQL
Elementos do Transact-SQL
Outros elementos de linguagem
Maneiras de executar as instruções Transact-SQL
Visão geral
Linguagemde programação Transact-SQL
Tipos de instruções Transact-SQL
Elementos de sintaxe do Transact-SQL
62.
Linguagem de programaçãoTransact-SQL
Implementa o padrão SQL-92 em nível de acesso
publicado pelo ANSI e pela ISO
Pode ser executada em qualquer produto compatível
com nível de acesso
Contém funcionalidade exclusiva adicional
63.
Tipos deinstruções Transact-SQL
Instruções de DDL
Instruções de DCL
Instruções de DML
64.
Instruções de DDL
Definem os objectos da base de dados
CREATE nome_do_objeto
ALTER nome_do_objeto
DROP nome_do_objeto
Devem ter as permissões apropriadas
USE northwind
CREATE TABLE customer
(cust_id int, company varchar(40),
contact varchar(30), phone char(12) )
GO
65.
Instruções de DCL
Definem ou alteram permissões
GRANT
DENY
REVOKE
Devem ter as permissões apropriadas
USE northwind
GRANT SELECT ON products TO public
GO
66.
Instruções de DML
Alteram dados ou recuperam informações
SELECT
INSERT
UPDATE
DELETE
Devem ter as permissões apropriadas
USE northwind
SELECT categoryid, productname, productid, unitprice
FROM products
GO
67.
Elementos desintaxe do Transact-SQL
Directivas em lotes
Comentários
Identificadores
Tipos de dados
Variáveis
Funções do sistema
Operadores
Expressões
Elementos de linguagem
de controle de fluxo
Palavras-chave
reservadas
68.
Directivas em lotes
GO
Define os lotes de instruções Transact-SQL para
ferramentas e utilitários
Não é uma instrução Transact-SQL real
EXEC
Executa uma função definida pelo utilizador,
um procedimento do sistema, um procedimento
armazenado definido pelo utilizador ou um procedimento
armazenado estendido
Controla a execução de uma sequência de caracteres
num lote do Transact-SQL
69.
Comentários
Comentários emlinha
Comentários em bloco
USE northwind
SELECT productname
, (unitsinstock - unitsonorder) -- Calcula o inventário
, supplierid
FROM products
GO
/*
Este código recupera todas as linhas da tabela
products e exibe o preço unitário, o preço unitário
aumentado em 10% e o nome do produto.
*/
USE northwind
SELECT unitprice, (unitprice * 1.1), productname
FROM products
GO
Exemplo 3
Exemplo 1
70.
Identificadores
Identificadorespadrão
O primeiro carácter deve ser um carácter alfabético
Outros caracteres podem incluir letras, numerais
ou símbolos
Os nomes de identificadores que começam com um
símbolo têm utilizações especiais
Identificadores delimitados
Use quando os nomes contiverem espaços incorporados
Use quando palavras reservadas forem partes
de nomes
Delimite-os por parêntesis rectos ([ ]) ou aspas duplas (" ")
71.
Directrizes de nomeaçãode identificadores
Mantenha os nomes curtos
Quando possível, empregue nomes significativos
Use convenções de nomeação simples e fáceis
Use um identificador que diferencie tipos de objecto
Views
Procedimentos armazenados
Mantenha a exclusividade dos nomes de objectos
e utilizadores
Tabela Sales e cargo sales
72.
Tipos de dados
Numbers
Dates
Characters
Binary
Unique Identifiers
SQL Variants
Image e Text
Tables
Cursors
Tipos de dados definidos
pelo utilizador
73.
Variáveis
Definidas peloutilizador com a instrução DECLARE
precedida de um símbolo @
Recebem valores através de uma instrução SET
ou SELECT precedida de um símbolo @
Têm âmbito local
USE northwind
DECLARE @EmpID varchar(11)
,@vlName char(20)
SET @vlname = 'Dodsworth'
SELECT @EmpID = employeeid
FROM employees
WHERE LastName = @vlname
SELECT @EmpID AS EmployeeID
GO
74.
Funções dosistema
Funções agregadas
Funções escalares
Funções de definição de registros
SELECT *
FROM OPENQUERY
(OracleSvr, 'SELECT name, id FROM owner.titles')
USE northwind
SELECT AVG (unitprice) AS AvgPrice
FROM products
GO
USE northwind
SELECT DB_NAME() AS 'database‘
GO
75.
Exemplos de funçõesdo sistema
SELECT 'ANSI:', CONVERT(varchar(30), GETDATE(), 102) AS
Style
UNION
SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)
UNION
SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)
GO
Resultado
Style
ANSI:
Japanese:
European:
1998.11.20
11/20/98
20 Nov 1998 16:44:12:857
Exemplo 1
76.
Operadores
Tipos deoperadores
Aritmético
Comparação
Concatenação de sequências de caracteres
Lógico
Níveis de precedência dos operadores
77.
Expressões
Combinação desímbolos e operadores
Avaliação como um único valor escalar
Resultado de tipo de dados dependentes dos
elementos na expressão
USE northwind
SELECT OrderID, ProductID
,(UnitPrice * Quantity) as ExtendedAmount
FROM [Order Details]
WHERE (UnitPrice * Quantity) > 10000
GO
78.
Elementos de linguagemde controle de fluxo
Nível de instrução
Blocos BEGIN … END
Blocos IF … ELSE
Construções com WHILE
Nível de registro
Expressão CASE
DECLARE @n tinyint
SET @n = 5
IF (@n BETWEEN 4 and 6)
BEGIN
WHILE (@n > 0)
BEGIN
SELECT @n AS 'Number'
,CASE
WHEN (@n % 2) = 1
THEN 'EVEN'
ELSE 'ODD'
END AS 'Type'
SET @n = @n - 1
END
END
ELSE
PRINT 'SEM ANÁLISE'
GO
Exemplo 2
79.
Palavras-chave reservadas
Nomesde identificadores que têm significado especial
Palavras-chave do Transact-SQL
Palavras-chave do ANSI SQL-92
Palavras-chave reservadas do ODBC
Não use palavras-chave reservadas para nomes
de identificadores
Visão geral
Linguagemde programação Transact-SQL
Tipos de instruções Transact-SQL
Elementos de sintaxe do Transact-SQL
84.
Linguagem de programaçãoTransact-SQL
Implementa o padrão SQL-92 em nível de acesso
publicado pelo ANSI e pela ISO
Pode ser executada em qualquer produto compatível
com nível de acesso
Contém funcionalidade exclusiva adicional
85.
Tipos deinstruções Transact-SQL
Instruções de DDL
Instruções de DCL
Instruções de DML
86.
Instruções de DDL
Definem os objectos da base de dados
CREATE nome_do_objeto
ALTER nome_do_objeto
DROP nome_do_objeto
Devem ter as permissões apropriadas
USE northwind
CREATE TABLE customer
(cust_id int, company varchar(40),
contact varchar(30), phone char(12) )
GO
87.
Instruções de DCL
Definem ou alteram permissões
GRANT
DENY
REVOKE
Devem ter as permissões apropriadas
USE northwind
GRANT SELECT ON products TO public
GO
88.
Instruções de DML
Alteram dados ou recuperam informações
SELECT
INSERT
UPDATE
DELETE
Devem ter as permissões apropriadas
USE northwind
SELECT categoryid, productname, productid, unitprice
FROM products
GO
89.
Elementos desintaxe do Transact-SQL
Directivas em lotes
Comentários
Identificadores
Tipos de dados
Variáveis
Funções do sistema
Operadores
Expressões
Elementos de linguagem
de controle de fluxo
Palavras-chave
reservadas
90.
Directivas em lotes
GO
Define os lotes de instruções Transact-SQL para
ferramentas e utilitários
Não é uma instrução Transact-SQL real
EXEC
Executa uma função definida pelo utilizador,
um procedimento do sistema, um procedimento
armazenado definido pelo utilizador ou um procedimento
armazenado estendido
Controla a execução de uma sequência de caracteres
num lote do Transact-SQL
91.
Comentários
Comentários emlinha
Comentários em bloco
USE northwind
SELECT productname
, (unitsinstock - unitsonorder) -- Calcula o inventário
, supplierid
FROM products
GO
/*
Este código recupera todas as linhas da tabela
products e exibe o preço unitário, o preço unitário
aumentado em 10% e o nome do produto.
*/
USE northwind
SELECT unitprice, (unitprice * 1.1), productname
FROM products
GO
Exemplo 3
Exemplo 1
92.
Identificadores
Identificadorespadrão
O primeiro carácter deve ser um carácter alfabético
Outros caracteres podem incluir letras, numerais
ou símbolos
Os nomes de identificadores que começam com um
símbolo têm utilizações especiais
Identificadores delimitados
Use quando os nomes contiverem espaços incorporados
Use quando palavras reservadas forem partes
de nomes
Delimite-os por parêntesis rectos ([ ]) ou aspas duplas (" ")
93.
Directrizes de nomeaçãode identificadores
Mantenha os nomes curtos
Quando possível, empregue nomes significativos
Use convenções de nomeação simples e fáceis
Use um identificador que diferencie tipos de objecto
Views
Procedimentos armazenados
Mantenha a exclusividade dos nomes de objectos
e utilizadores
Tabela Sales e cargo sales
94.
Tipos de dados
Numbers
Dates
Characters
Binary
Unique Identifiers
SQL Variants
Image e Text
Tables
Cursors
Tipos de dados definidos
pelo utilizador
95.
Variáveis
Definidas peloutilizador com a instrução DECLARE
precedida de um símbolo @
Recebem valores através de uma instrução SET
ou SELECT precedida de um símbolo @
Têm âmbito local
USE northwind
DECLARE @EmpID varchar(11)
,@vlName char(20)
SET @vlname = 'Dodsworth'
SELECT @EmpID = employeeid
FROM employees
WHERE LastName = @vlname
SELECT @EmpID AS EmployeeID
GO
96.
Funções dosistema
Funções agregadas
Funções escalares
Funções de definição de registros
SELECT *
FROM OPENQUERY
(OracleSvr, 'SELECT name, id FROM owner.titles')
USE northwind
SELECT AVG (unitprice) AS AvgPrice
FROM products
GO
USE northwind
SELECT DB_NAME() AS 'database‘
GO
97.
Exemplos de funçõesdo sistema
SELECT 'ANSI:', CONVERT(varchar(30), GETDATE(), 102) AS
Style
UNION
SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)
UNION
SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)
GO
Resultado
Style
ANSI:
Japanese:
European:
1998.11.20
11/20/98
20 Nov 1998 16:44:12:857
Exemplo 1
98.
Operadores
Tipos deoperadores
Aritmético
Comparação
Concatenação de sequências de caracteres
Lógico
Níveis de precedência dos operadores
99.
Expressões
Combinação desímbolos e operadores
Avaliação como um único valor escalar
Resultado de tipo de dados dependentes dos
elementos na expressão
USE northwind
SELECT OrderID, ProductID
,(UnitPrice * Quantity) as ExtendedAmount
FROM [Order Details]
WHERE (UnitPrice * Quantity) > 10000
GO
100.
Elementos de linguagemde controle de fluxo
Nível de instrução
Blocos BEGIN … END
Blocos IF … ELSE
Construções com WHILE
Nível de registro
Expressão CASE
DECLARE @n tinyint
SET @n = 5
IF (@n BETWEEN 4 and 6)
BEGIN
WHILE (@n > 0)
BEGIN
SELECT @n AS 'Number'
,CASE
WHEN (@n % 2) = 1
THEN 'EVEN'
ELSE 'ODD'
END AS 'Type'
SET @n = @n - 1
END
END
ELSE
PRINT 'SEM ANÁLISE'
GO
Exemplo 2
101.
Palavras-chave reservadas
Nomesde identificadores que têm significado especial
Palavras-chave do Transact-SQL
Palavras-chave do ANSI SQL-92
Palavras-chave reservadas do ODBC
Não use palavras-chave reservadas para nomes
de identificadores
Visão geral
Listandoos primeiros n valores com TOP n
Usando funções agregadas
Noções básicas sobre a cláusula GROUP BY
Gerando valores agregados em conjuntos
de resultados
Usando as cláusulas COMPUTE e COMPUTE BY
106.
Listando os primeirosn valores com TOP n
Lista apenas os n primeiros registros de um conjunto
de resultados
Especifica o intervalo de valores na cláusula ORDER BY
Retorna correspondências se WITH TIES for usada
USE northwind
SELECT TOP 5 orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO
USE northwind
SELECT TOP 5 WITH TIES orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO
Exemplo 1
Exemplo 2
107.
Usando funçõesagregadas
Funções agregadas Descrição
AVG Média de valores em uma expressão numérica
COUNT Número de valores em uma expressão
COUNT (*) Número de registros selecionados
MAX Maior valor da expressão
MIN Menor valor da expressão
SUM Valores totais em uma expressão numérica
STDEV Desvio padrão de todos os valores
STDEVP Desvio padrão da população
VAR Variância estatística de todos os valores
VARP
Variância estatística de todos os valores da
população
108.
Usando funções agregadascom valores nulos
A maioria das funções agregadas ignora valores nulos
A função COUNT (*) conta todos os registos com
valores nulos
USE northwind
SELECT COUNT (*)
FROM employees
GO
USE northwind
SELECT COUNT(reportsto)
FROM employees
GO
Exemplo 1
Exemplo 2
109.
Noções básicassobre a cláusula GROUP BY
Usando a cláusula GROUP BY
Usando a cláusula GROUP BY com a cláusula HAVING
110.
Usando a cláusulaGROUP BY
USE northwind
SELECT productid, orderid
,quantity
FROM orderhist
GO
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid
GO
productid orderid quantity
1 1 5
1 1 10
2 1 10
2 2 25
3 1 15
3 2 30
productid total_quantity
1 15
2 35
3 45
productid total_quantity
2 35
Apenas os
registos que
satisfazem às
condições da
cláusula WHERE
serão agrupados
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
WHERE productid = 2
GROUP BY productid
GO
111.
Usando a cláusulaGROUP BY com a cláusula
HAVING
USE northwind
SELECT productid, orderid
,quantity
FROM orderhist
GO
USE northwind
SELECT productid, SUM(quantity)
AS total_quantity
FROM orderhist
GROUP BY productid
HAVING SUM(quantity)>=30
GO
productid total_quantity
2 35
3 45
productid orderid quantity
1 1 5
1 1 10
2 1 10
2 2 25
3 1 15
3 2 30
112.
Gerando valoresagregados em conjuntos
de resultados
Usando a cláusula GROUP BY com o operador ROLLUP
Usando a cláusula GROUP BY com o operador CUBE
Usando a função GROUPING
113.
Usando a cláusulaGROUP BY com o operador ROLLUP
USE northwind
SELECT productid, orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH ROLLUP
ORDER BY productid, orderid
GO
Descrição
productid orderid total_quantity
NULL NULL 95
1 NULL 15
1 1 5
1 2 10
2 NULL 35
2 1 10
2 2 25
3 NULL 45
3 1 15
3 2 30
Total geral
Resume apenas os registros de productid 1
Valores de detalhe de productid 1, orderid 1
Valores de detalhe de productid 1, orderid 2
Resume apenas os registros de productid 2
Valores de detalhe de productid 2, orderid 1
Resume apenas os registros de productid 3
Valores de detalhe de productid 3, orderid 1
Valores de detalhe de productid 3, orderid 2
114.
USE northwind
SELECT productid,orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO
Usando a cláusula GROUP BY com o operador CUBE
O operador CUBE
produz dois
valores de
resumo a mais
que o operador
ROLLUP
Descrição
productid orderid total_quantity
NULL NULL 95
NULL 1 30
NULL 2 65
1 NULL 15
1 1 5
1 2 10
2 NULL 35
2 1 10
2 2 25
3 NULL 45
3 1 15
3 2 30
Total geral
Resume todos os registros de orderid 1
Resume todos os registros de orderid 2
Resume apenas os registros de productid 1
Valores de detalhe de productid 1, orderid 1
Valores de detalhe de productid 1, orderid 2
Resume apenas os registros de productid 2
Valores de detalhe de productid 2, orderid 1
Valores de detalhe de productid 2, orderid 2
Resume apenas os registros de productid 3
Valores de detalhe de productid 3, orderid 1
Valores de detalhe de productid 3, orderid 2
115.
1 representa osvalores de resumo
na coluna anterior
0 representa os valores de detalhe na
na coluna anterior
Usando a função GROUPING
USE northwind
SELECT productid, GROUPING (productid)
,orderid, GROUPING (orderid)
,SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO productid
NULL
NULL
NULL
1
1
1
2
2
2
3
3
3
1
1
1
0
0
0
0
0
0
0
0
0
orderid
NULL
1
2
NULL
1
2
NULL
1
2
NULL
1
2
1
0
0
1
0
0
1
0
0
1
0
0
total_quantity
95
30
65
15
5
10
35
10
25
45
15
30
116.
Usando as cláusulasCOMPUTE e COMPUTE BY
COMPUTE BY
COMPUTE
USE northwind
SELECT productid, orderid, quantity
FROM orderhist
ORDER BY productid, orderid
COMPUTE SUM(quantity) BY productid
COMPUTE SUM(quantity)
GO
USE northwind
SELECT productid, orderid
,quantity
FROM orderhist
ORDER BY productid, orderid
COMPUTE SUM(quantity)
GO
productid orderid quantity
1 1 5
1 2 10
2 1 10
2 2 25
3 1 15
3 2 30
sum 95
productid orderid quantity
1 1 5
1 2 10
sum 15
2 1 10
2 2 25
sum 35
3 1 15
3 2 30
sum 45
sum 95
117.
Práticas recomendadas
Use acláusula COMPUTE ou COMPUTE BY para testar
as suas aplicacões
Use a cláusula COMPUTE ou COMPUTE BY para testar
as suas aplicacões
Indexe colunas frequentemente agregadas
Indexe colunas frequentemente agregadas
Evite usar funções agregadas com colunas que
contêm valores nulos
Evite usar funções agregadas com colunas que
contêm valores nulos
Use a cláusula ORDER BY para garantir a classificação do
conjunto de resultados
Use a cláusula ORDER BY para garantir a classificação do
conjunto de resultados
Use o operador ROLLUP sempre que possível
Use o operador ROLLUP sempre que possível
118.
Práticas recomendadas
Indexe colunasfrequentemente agregadas
Indexe colunas frequentemente agregadas
Evite usar funções agregadas com colunas que
contêm valores nulos
Evite usar funções agregadas com colunas que
contêm valores nulos
Use a cláusula ORDER BY para garantir a classificação do
conjunto de resultados
Use a cláusula ORDER BY para garantir a classificação do
conjunto de resultados
Use o operador ROLLUP sempre que possível
Use o operador ROLLUP sempre que possível
Use a cláusula COMPUTE ou COMPUTE BY para testar
as suas aplicacões
Use a cláusula COMPUTE ou COMPUTE BY para testar
as suas aplicacões
Revisão
Listando osprimeiros n valores com TOP n
Usando funções agregadas
Noções básicas sobre a cláusula GROUP BY
Gerando valores agregados em conjuntos
de resultados
Usando as cláusulas COMPUTE e COMPUTE BY
Visão geral
Usandoaliases para nomes de tabelas
Combinando dados de várias tabelas
Combinando vários conjuntos de resultados
123.
Usando aliases paranomes de tabelas
Exemplo 1 (sem nome de alias)
Exemplo 2 (com nome de alias)
USE joindb
SELECT buyer_name, s.buyer_id, qty
FROM buyers AS b
INNER JOIN sales AS s
ON b.buyer_id = s.buyer_id
GO
USE joindb
SELECT buyer_name, sales.buyer_id, qty
FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO
124.
Combinando dadosde várias tabelas
Introdução às associações
Usando associações internas
Usando associações externas
Usando associações cruzadas
Associando mais de duas tabelas
Associando uma tabela a si mesma
125.
Introdução às associações
Seleccionar colunas específicas a partir de várias tabelas
A palavra-chave JOIN especifica quais tabelas serão
associadas e como associá-las
A palavra-chave ON especifica as colunas que as tabelas
têm em comum
Consultar duas ou mais tabelas para produzir um conjunto
de resultados
Usar chaves primárias e externas como condições
de associação
Usar colunas comuns às tabelas especificadas para
associar tabelas
126.
USE joindb
SELECT buyer_name,sales.buyer_id, qty
FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO
buyer_name
Adam Barr
Sean Chai
Eva Corets
Erin O’Melia
buyer_id
1
2
3
4
Usando associações internas
sales
buyer_id prod_id qty
1
1
4
3
2
3
1
5
15
5
37
11
4 2 1003
buyers
Resultado
buyer_name
Adam Barr
Adam Barr
Erin O’Melia
Eva Corets
buyer_id qty
1
1
4
3
15
5
37
11
Erin O’Melia 4 1003
Exemplo 1
127.
USE joindb
SELECT buyer_name,sales.buyer_id, qty
FROM buyers
LEFT OUTER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO
buyer_id prod_id qty
1
1
4
3
2
3
1
5
15
5
37
11
4 2 1003
buyer_name
Adam Barr
Sean Chai
Eva Corets
Erin O’Melia
buyer_id
1
2
3
4
Usando associações externas
sales
buyers
Resultado
buyer_name
Adam Barr
Adam Barr
Erin O’Melia
Eva Corets
buyer_id qty
1
1
4
3
15
5
37
11
Erin O’Melia 4 1003
Sean Chai NULL NULL
Exemplo 1
128.
Usando associações cruzadas
Resultado
USEjoindb
SELECT buyer_name, qty
FROM buyers
CROSS JOIN sales
GO
buyer_name
Adam Barr
Adam Barr
Adam Barr
Adam Barr
qty
15
5
37
11
Adam Barr 1003
Sean Chai 15
Sean Chai 5
Sean Chai 37
Sean Chai 11
Sean Chai 1003
Eva Corets 15
... ...
sales
buyer_id prod_id qty
1
1
4
3
2
3
1
5
15
5
37
11
4 2 1003
buyers
buyer_id
1
2
3
4
buyer_name
Adam Barr
Sean Chai
Eva Corets
Erin O’Melia
Exemplo 1
129.
USE joindb
SELECT buyer_name,prod_name, qty
FROM buyers
INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id
INNER JOIN produce
ON sales.prod_id = produce.prod_id
GO
produce
buyers sales
Resultado
Associando mais de duas tabelas
prod_id prod_name
1
2
3
4
Apples
Pears
Oranges
Bananas
5 Peaches
buyer_id
1
2
3
4
buyer_name
Adam Barr
Sean Chai
Eva Corets
Erin O’Melia
buyer_id
1
1
3
4
prod_id
2
3
1
5
2 2
qty
15
5
37
11
1003
Exemplo 1
buyer_name
Erin O’Melia
Adam Barr
Erin O’Melia
Adam Barr
Eva Corets
prod_name
Apples
Pears
Pears
Oranges
Peaches
qty
37
15
1003
5
11
130.
USE joindb
SELECT a.buyer_idAS buyer1, a.prod_id
,b.buyer_id AS buyer2
FROM sales AS a
INNER JOIN sales AS b
ON a.prod_id = b.prod_id
WHERE a.buyer_id > b.buyer_id
GO
Associando uma tabela a si mesma
sales b
buyer_id prod_id qty
1
1
4
3
2
3
1
5
15
5
37
11
4 2 1003
sales a
buyer_id prod_id qty
1
1
4
3
2
3
1
5
15
5
37
11
4 2 1003
Resultado
buyer1
4
prod_id buyer2
2 1
Exemplo 3
131.
Combinando vários conjuntosde resultados
Usar o operador UNION para criar um único conjunto
de resultados de várias consultas
As consultas precisam de:
Tipos de dados semelhantes
Número de colunas idêntico
Ordem de colunas idêntica na lista de selecções
USE northwind
SELECT (firstname + ' ' + lastname) AS name
,city, postalcode
FROM employees
UNION
SELECT companyname, city, postalcode
FROM customers
GO
132.
Práticas recomendadas
Associe tabelasem chaves primárias e externas
Associe tabelas em chaves primárias e externas
Usar como referência todas as colunas de uma chave primária
composta na cláusula ON quando uma chave composta
relacionar tabelas
Usar como referência todas as colunas de uma chave primária
composta na cláusula ON quando uma chave composta
relacionar tabelas
Limitar o número de tabelas numa associação
Limitar o número de tabelas numa associação
Visão geral
Introduçãoàs subconsultas
Usando uma subconsulta como uma tabela derivada
Usando uma subconsulta como uma expressão
Usando uma subconsulta para correlacionar dados
Usando as cláusulas EXISTS e NOT EXISTS
137.
Introdução às subconsultas
Porque usar subconsultas?
Para dividir uma consulta complexa numa sequência de
etapas lógicas
Para responder a uma consulta quando ela se baseia
nos resultados de outra consulta
Porque usar associações em vez de subconsultas?
O SQL Server executa associações de forma mais
rápida que as subconsultas
Como usar subconsultas?
138.
Usando uma subconsultacomo uma tabela derivada
É um conjunto de registos dentro da consulta que
funciona como uma tabela
Toma o lugar de uma tabela na cláusula FROM
É optimizada com o resto da consulta
USE northwind
SELECT T.orderid, T.customerid
FROM ( SELECT orderid, customerid
FROM orders ) AS T
GO
139.
Usando uma subconsultacomo uma expressão
É avaliada e tratada como uma expressão
É executada uma vez para toda a instrução
USE pubs
SELECT title, price
,( SELECT AVG(price) FROM titles) AS average
,price-(SELECT AVG(price) FROM titles) AS difference
FROM titles
WHERE type='popular_comp'
GO
140.
Usando umasubconsulta para
correlacionar dados
Avaliando uma subconsulta correlacionada
Imitando uma cláusula JOIN
Imitando uma cláusula HAVING
141.
Voltar para etapa1
Avaliando uma subconsulta correlacionada
USE Northwind
SELECT orderid, customerid
FROM orders AS or1
WHERE 20 < (SELECT quantity
FROM [order details] AS od
WHERE or1.orderid = od.orderid
AND od.productid = 23)
GO
A consulta interna usa os
valores passados pela
consulta externa
A consulta interna retorna um
valor à consulta externa
O processo se repete para o
próximo registro da consulta
externa
Exemplo 1
A consulta externa passa um
valor de coluna à consulta
interna
142.
Imitando uma cláusulaJOIN
Subconsultas correlacionadas podem produzir os
mesmos resultados de uma cláusula JOIN
Associações permitem que o optimizador de consultas
determine como correlacionar os dados de forma
mais eficiente
USE pubs
SELECT DISTINCT t1.type
FROM titles AS t1
WHERE t1.type IN
(SELECT t2.type
FROM titles AS t2
WHERE t1.pub_id <> t2.pub_id)
GO
Exemplo 1
143.
USE pubs
SELECT t1.type,t1.title, t1.price
FROM titles AS t1
INNER JOIN titles AS t2
ON t1.type = t2.type
GROUP BY t1.type, t1.title, t1.price
HAVING t1.price > AVG(t2.price)
GO
Imitando uma cláusula HAVING
Subconsulta com o mesmo resultado de uma cláusula
HAVING
Usando uma cláusula HAVING sem uma subconsulta
USE pubs
SELECT t1.type, t1.title, t1.price
FROM titles AS t1
WHERE t1.price > ( SELECT AVG(t2.price)
FROM titles AS t2
WHERE t1.type = t2.type )
GO
Exemplo 1
Exemplo 2
144.
Usando as cláusulasEXISTS e NOT EXISTS
Usar com subconsultas correlacionadas
Determinar se há dados numa lista de valores
Processo do SQL Server
A consulta externa testa a existência dos registos
A subconsulta retorna um valor TRUE ou FALSE
A subconsulta não produz quaisquer dados
USE northwind
SELECT lastname, employeeid
FROM employees AS e
WHERE EXISTS (SELECT * FROM orders AS o
WHERE e.employeeid = o.employeeid
AND o.orderdate = '9/5/1997')
GO
Exemplo 1
145.
Práticas recomendadas
Use subconsultaspara dividir uma consulta complexa
Use subconsultas para dividir uma consulta complexa
Use aliases de nomes de tabelas em subconsultas correlacionadas
Use aliases de nomes de tabelas em subconsultas correlacionadas
Use a instrução INSERT…SELECT para adicionar registos de
outras origens à tabela existente
Use a instrução INSERT…SELECT para adicionar registos de
outras origens à tabela existente
Use o operador EXISTS em vez do operador IN
Use o operador EXISTS em vez do operador IN
Revisão
Introdução àssubconsultas
Usando uma subconsulta como uma tabela derivada
Usando uma subconsulta como uma expressão
Usando uma subconsulta para correlacionar dados
Usando as cláusulas EXISTS e NOT EXISTS
Inserindo dados
Inserindo um registo de dados por valores
Usando a instrução INSERT…SELECT
Criando uma tabela usando a instrução SELECT INTO
Inserindo dados parciais
Inserindo dados usando padrões de coluna
153.
Inserindo um registode dados por valores
As restrições de destino devem ser obedecidas, caso
contrário, a transacção INSERT falhará
Use a lista_de_colunas para especificar as colunas que
armazenarão cada valor de entrada
Especifique os dados que serão inseridos, através da
cláusula VALUES
USE northwind
INSERT customers
(customerid, companyname, contactname, contacttitle
,address, city, region, postalcode, country, phone
,fax)
VALUES ('PECOF', 'Pecos Coffee Company', 'Michael Dunn'
,'Owner', '1900 Oak Street', 'Vancouver', 'BC'
,'V3F 2K1', 'Canada', '(604) 555-3392'
,'(604) 555-7293')
GO
154.
USE northwind
INSERT customers
SELECTsubstring(firstname, 1, 3)
+ substring (lastname, 1, 2)
,lastname, firstname, title, address, city
,region, postalcode, country, homephone, NULL
FROM employees
GO
Usando a instrução INSERT…SELECT
Todos os registos que atendem à instrução SELECT
são inseridos
Deve certificar-se da existência da tabela que recebe os
novos registros no banco de dados
Deve certificar-se de que as colunas da tabela que
recebe os novos valores tenham tipos de dados
compatíveis
Deve determinar se existe um valor padrão ou se
é permitido um valor nulo
155.
Criando uma tabelausando a instrução SELECT INTO
Usar a instrução SELECT INTO para criar uma tabela e
inserir registos nessa tabela numa única operação
Criar uma tabela temporária local ou global
Criar aliases de colunas ou especificar os nomes de
colunas da nova tabela na lista de selecções
USE northwind
SELECT productname AS products
,unitprice AS price
,(unitprice * 1.1) AS tax
INTO #pricetable
FROM products
GO
156.
Inserindo dados parciais
USEnorthwind
INSERT shippers (companyname)
VALUES ('Fitch & Mather')
GO
Adicionando novos dados
USE northwind
SELECT *
FROM shippers
WHERE companyname = 'Fitch & Mather'
GO
Verificando novos dados
shipperid
37
companyname
Fitch & Mather
phone
Null
Permite valores nulos
Exemplo 1
Exemplo 2
157.
Inserindo dados usandopadrões de coluna
Palavra-chave DEFAULT
Insere valores padrão para colunas especificadas
As colunas devem ter um valor padrão ou permitir
valores nulos
Palavra-chave DEFAULT VALUES
Insere valores padrão para todas as colunas
As colunas devem ter um valor padrão ou permitir
valores nulos
USE northwind
INSERT shippers (companyname, phone)
VALUES ('Kenya Coffee Co.', DEFAULT)
GO
158.
Excluindo dados
Usando a instrução DELETE
Usando a instrução TRUNCATE TABLE
Excluindo registos com base noutras tabelas
159.
Usando a instruçãoDELETE
A instrução DELETE remove um ou mais registos
numa tabela a menos que se use uma cláusula WHERE
USE northwind
DELETE orders
WHERE DATEDIFF(MONTH, shippeddate, GETDATE()) >= 6
GO
160.
USE northwind
TRUNCATE TABLEorders
GO
Usando a instrução TRUNCATE TABLE
A instrução TRUNCATE TABLE exclui todos os registos
numa tabela
O SQL Server mantém a estrutura da tabela e os
objectos associados
161.
Excluindo registos combase noutras tabelas
Usando uma cláusula FROM adicional
A primeira cláusula FROM indica a tabela da qual
os registos serão excluídos
A segunda cláusula FROM pode introduzir uma
associação e actuar como critério de restrição para
a instrução DELETE
USE northwind
DELETE FROM [order details]
FROM orders AS o
INNER JOIN [order details] AS od
ON o.orderid = od.orderid
WHERE orderdate = ‘4/14/1998’
GO
162.
Excluindo registos combase noutras tabelas
Especificando condições na cláusula WHERE
As subconsultas determinam os registos a
serem excluídos
USE northwind
DELETE FROM [order details]
WHERE orderid IN (
SELECT orderid
FROM orders
WHERE orderdate = ‘4/14/1998’
)
GO
163.
Actualizando dados
Actualizando registos com base nos dados da tabela
Actualizado registos com base noutras tabelas
164.
USE northwind
UPDATE products
SETunitprice = (unitprice * 1.1)
GO
Actualizando registos com base nos dados da tabela
Especifique os registros que serão actualizados
com cláusula WHERE
Especifique os novos valores com a cláusula SET
Verifique se os valores inseridos têm tipos de dados
compatíveis com os tipos de dados definidos para
as colunas
O SQL Server não actualiza os registos que violam
qualquer restrição de integridade
165.
Actualizando registos combase noutras tabelas
Como a instrução UPDATE funciona
Nunca actualiza o mesmo registo duas vezes
Requer prefixos de tabela em nomes de coluna
ambíguos
166.
Actualizando registos combase noutras tabelas
Especificando registos para actualização usando
associações
Usa a cláusula FROM
USE northwind
UPDATE products
SET unitprice = unitprice + 2
FROM products
INNER JOIN suppliers
ON products.supplierid = suppliers.supplierid
WHERE suppliers.country = ‘USA’
GO
167.
Actualizando registos combase noutras tabelas
Especificando registos para actualização usando
subconsultas
Correlaciona a subconsulta com a tabela actualizada
USE northwind
UPDATE products
SET unitprice = unitprice + 2
FROM products
WHERE supplierid IN (
SELECT supplierid
FROM suppliers
WHERE country = ‘USA’
)
GO
168.
Considerações sobre odesempenho
Todas as modificações de dados ocorrem em uma
transacção
Pode ocorrer a alocação de página de dados
A modificação de colunas de dados indexadas causa
sobrecarga
A colocação de índices em colunas pode auxiliar nos
critérios de pesquisa e melhorar o desempenho
169.
Práticas recomendadas
Escreva sempreuma instrução SELECT que não modifique
os dados antes de os modificar verdadeiramente
Escreva sempre uma instrução SELECT que não modifique
os dados antes de os modificar verdadeiramente
Facilite a leitura dos conjuntos de resultados, alterando os
nomes de coluna ou usando literais
Facilite a leitura dos conjuntos de resultados, alterando os
nomes de coluna ou usando literais
Inclua sempre uma cláusula WHERE com as instruções
DELETE e UPDATE
Inclua sempre uma cláusula WHERE com as instruções
DELETE e UPDATE
Visão geral
Criandotipos de dados
Criando tabelas
Gerando valores de colunas
Gerando scripts
174.
Criando tiposde dados
Tipos de dados fornecidos pelo sistema
Criando e eliminando tipos de dados definidos pelo
utilizador
Directrizes para especificar tipos de dados
175.
Tipos de dadosfornecidos pelo sistema
Numérico
Inteiro
Numérico exacto
Numérico aproximado
Monetário
Data e hora
Carácter e carácter Unicode
Binário
Outros
176.
Criando e eliminandotipos de dados definidos pelo
utilizador
Eliminando
Criando
EXEC sp_addtype city, 'nvarchar(15)', NULL
EXEC sp_addtype region, 'nvarchar(15)', NULL
EXEC sp_addtype country, 'nvarchar(15)', NULL
EXEC sp_droptype city
177.
Directrizes para especificartipos de dados
Se o comprimento da coluna variar, use um dos tipos de
dados variáveis
Use tinyint de forma apropriada
Para tipos de dados numéricos, use decimal
Se o armazenamento for maior que 8000 bytes, use text
ou image
Use o tipo de dado money para unidade monetária
Não use os tipos de dados aproximados float e real
como chaves primárias
178.
Criando tabelas
Como o SQL Server organiza dados em registos
Como o SQL Server organiza os tipos de dados text,
ntext e image
Criando e eliminando uma tabela
Adicionando e eliminando uma coluna
179.
Como o SQLServer organiza dados em registos
Cabeçalho
Dados de
tamanho fixo
BN BV
Dados de
tamanho variável
Bloco
nulo
Bloco
variável
4 bytes
Dados
180.
Como o SQLServer organiza os tipos de dados text,
ntext e image
Registo de dados
Apontador
de texto
Estrutura raiz
Nó intermediário Nó intermediário
bloco 1 bloco 2 bloco 1 bloco 2
181.
DROP TABLE dbo.Categories
Criando uma tabela
Eliminando uma tabela
Criando e eliminando uma tabela
Nome da coluna Tipo de dados
NULL ou
NOT NULL
CREATE TABLE dbo.Categories
(CategoryID
CategoryName
Description
Picture
es nvarchar(15)
int IDENTITY
(1,1)
dbo.Categories nvarchar(15)
ntext
image
NOT NULL,
NOT NULL,
NULL,
NULL)
182.
Adicionando e eliminandouma coluna
ALTER TABLE CategoriesNew
ADD Commission money null
ADICIONA
R
ALTER TABLE CategoriesNew
DROP COLUMN Comission
ELIMINAR
Customer_name Sales_amount Sales_date Customer ID Commission
183.
Gerando valoresde colunas
Usando a propriedade Identity
Usando a função NEWID e o tipo de dados
uniqueidentifier
184.
Usando a propriedadeIdentity
Requisitos para utilização da propriedade Identity
Somente uma coluna de identidade é permitida por
tabela
Use com o tipo de dados integer, numeric ou decimal
Recuperando informações sobre a propriedade Identity
Use IDENT_SEED e IDENT_INCR para informações
sobre definição
Use @@identity para determinar o valor mais recente
Gerindo a propriedade Identity
185.
Usando a funçãoNEWID e o tipo de dados
uniqueidentifier
Esses recursos são usados em conjunto
Use valores globalmente exclusivos
Use com a restrição DEFAULT
CREATE TABLE Customer
(CustID uniqueidentifier NOT NULL DEFAULT NEWID(),
CustName char(30) NOT NULL)
186.
Gerando scripts
Geraresquema como um script Transact-SQL
Manter um script de backup
Criar ou actualizar um script de desenvolvimento de
banco de dados
Criar um ambiente de teste ou desenvolvimento
Treinar novos funcionários
O que gerar
Uma base de dados inteira num único ficheiro de script
Um esquema somente de tabelas
Um esquema de tabelas e índices
187.
Práticas recomendadas
Especifique sempreas características das colunas
em CREATE TABLE
Especifique sempre as características das colunas
em CREATE TABLE
Gere um script para recriar a base de dados e os seus objectos
Gere um script para recriar a base de dados e os seus objectos
Especifique tipos de dados apropriados e tamanhos para
os tipos de dados
Especifique tipos de dados apropriados e tamanhos para
os tipos de dados
Visão geral
Tiposde integridade de dados
Impondo a integridade de dados
Definindo restrições
Tipos de restrições
Desactivando restrições
Usando padrões e regras
Decidindo que método de imposição usar
192.
Tipos de integridadede dados
Integridade de domínio
(colunas)
Integridade de entidade
(registos)
Integridade referencial
(entre tabelas)
193.
Impondo a integridadede dados
Integridade de dados declarativa
Critérios estabelecidos em definições de objecto
O SQL Server impõe automaticamente
Implemente a integridade declarativa usando restrições,
padrões e regras
Integridade de dados procedimental
Critérios definidos em script
O script impõe
Implemente a integridade procedimental usando triggers
e procedimentos armazenados
194.
Definindo restrições
Determinando o tipo de restrição que será usado
Criando restrições
Considerações sobre o uso de restrições
195.
Determinando o tipode restrição que será usado
Tipo de integridade Tipo de restrição
Domínio
DEFAULT
CHECK
REFERENTIAL
Entidade
PRIMARY KEY
UNIQUE
Referencial
FOREIGN KEY
CHECK
196.
Criando restrições
UseCREATE TABLE ou ALTER TABLE
É possível adicionar restrições a uma tabela com dados
existentes
É possível colocar restrições numa única coluna ou em
várias colunas
Única coluna, chamada de restrição em nível de coluna
Várias colunas, chamada de restrição em nível de tabela
197.
Considerações sobre ouso de restrições
Podem ser alteradas sem recriar uma tabela
Exigem verificação de erros em aplicações e
transacções
Verificam dados existentes
Restrições DEFAULT
Aplicam-seapenas a instruções INSERT
Apenas uma restrição DEFAULT por coluna
Não podem ser usadas com a propriedade IDENTITY
ou o tipo de dados rowversion
Permitem alguns valores fornecidos pelo sistema
USE Northwind
GO
ALTER TABLE dbo.Customers
ADD
CONSTRAINT DF_contactname DEFAULT 'UNKNOWN'
FOR ContactName
GO
200.
Restrições CHECK
Sãousadas com as instruções INSERT e UPDATE
Podem fazer referência a outras colunas na mesma
tabela
Não podem:
Ser usadas com o tipo de dados rowversion
Conter subconsultas
USE Northwind
GO
ALTER TABLE dbo.Employees
ADD
CONSTRAINT CK_birthdate
CHECK (BirthDate > '01-01-1900' AND BirthDate <
getdate())
GO
201.
Restrições PRIMARY KEY
Apenas uma restrição PRIMARY KEY por tabela
Os valores devem ser exclusivos
Não são permitidos valores nulos
Cria um índice exclusivo nas colunas especificadas
USE Northwind
GO
ALTER TABLE dbo.Customers
ADD
CONSTRAINT PK_Customers
PRIMARY KEY NONCLUSTERED (CustomerID)
GO
202.
Restrições UNIQUE
Permitemum valor nulo
Permitem várias restrições UNIQUE numa tabela
Definidas com uma ou mais colunas
Impostas com um índice exclusivo
USE Northwind
GO
ALTER TABLE dbo.Suppliers
ADD
CONSTRAINT U_CompanyName
UNIQUE NONCLUSTERED (CompanyName)
GO
203.
Restrições FOREIGN KEY
Devem fazer referência a uma restrição PRIMARY KEY
ou UNIQUE
Fornecem uma integridade referencial de uma ou várias
colunas
Não criam índices automaticamente
Os utilizadores devem ter as permissões SELECT ou
REFERENCES em tabelas referenciadas
Usam apenas uma cláusula REFERENCES na mesma
tabela
USE Northwind
GO
ALTER TABLE dbo.Orders
ADD CONSTRAINT FK_Orders_Customers
FOREIGN KEY (CustomerID)
REFERENCES dbo.Customers(CustomerID)
GO
204.
Integridade referencial emcascata
EM CASCATA
SEM ACÇÃO
Customers
INSERT new
CustomerID
CustomerID (PK)
1
Orders
CustomerID (FK)
UPDATE old
CustomerID to new
CustomerID
2
Customers
CustomerID (PK)
UPDATE CustomerID
Orders
CustomerID (FK)
1
EM CASCATA
Customers
DELETE old
CustomerID
CustomerID (PK)
3
205.
Desactivando restrições
Desactivando a verificação de restrições nos dados
existentes
Desactivando a verificação de restrições ao carregar
novos dados
206.
Desactivando a verificaçãode restrições nos dados
existentes
Só é possível desactivar as restrições CHECK e
FOREIGN KEY
Use a opção WITH NOCHECK quando adicionar uma
nova restrição
Use a opção WITH NOCHECK se dados existentes não
forem alterados
É possível alterar dados existentes antes de adicionar
restrições
USE Northwind
GO
ALTER TABLE dbo.Employees
WITH NOCHECK
ADD CONSTRAINT FK_Employees_Employees
FOREIGN KEY (ReportsTo)
REFERENCES dbo.Employees(EmployeeID)
GO
207.
Desactivando a verificaçãode restrições ao carregar
novos dados
Só é possível desactivar as restrições CHECK e
FOREIGN KEY
Use quando:
Os dados obedecem às restrições
O carregamento de novos dados não obedecem às
restrições
USE Northwind
GO
ALTER TABLE dbo.Employees
NOCHECK
CONSTRAINT FK_Employees_Employees
GO
208.
Usando padrões eregras
Como os objectos independentes, eles:
São definidos uma vez
Podem ser ligados a uma ou mais colunas
ou aos tipos de dados definidos pelo usuário
USE Northwind
GO
CREATE DEFAULT phone_no_default
AS '(000)000-0000'
GO
EXEC sp_bindefault phone_no_default,
'Customers.Phone'
USE Northwind
GO
CREATE RULE regioncode_rule
AS @regioncode IN ('IA', 'IL', 'KS', 'MO')
GO
EXEC sp_bindrule regioncode_rule, 'Customers.Region'
209.
Decidindo que métodode imposição usar
Componente
da integridade
de dados
Restrições
Padrões e regras
Triggers
Funcionalidade
Média
Baixa
Alta
Sobrecarga
Baixa
Baixa
Média-alta
Antes ou depois
da modificação
Antes
Antes
Depois
Tipos de dados,
Nulos/Não nulos
Baixa Baixa Antes
210.
Práticas recomendadas
Use aintegridade referencial em cascata em vez de triggers
Use a integridade referencial em cascata em vez de triggers
Use restrições, pois estão em conformidade com o padrão ANSI
Use restrições, pois estão em conformidade com o padrão ANSI
Revisão
Tipos deintegridade de dados
Impondo a integridade de dados
Definindo restrições
Tipos de restrições
Desativando restrições
Usando padrões e regras
Decidindo que método de imposição usar
Visão geral
Exibindoo texto de um objecto de programação
Introdução às views
Vantagens das views
Criando views
Introdução aos procedimentos armazenados
Introdução aos triggers
Introdução às funções definidas pelo utilizador
215.
Exibindo o textode um objecto de programação
EXEC sp_helptext [ @objname = ] ‘nome’
Nem todo o objecto de programação possui texto
associado
USE library
EXEC sp_helptext 'dbo.OverdueView'
GO
216.
Introdução às views
TitleView
titleauthor
Last of the Mohicans
The Village Watch-Tower
Poems
James Fenimore Cooper
Kate Douglas Wiggin
Wilfred Owen
View do utilizador
USE library
GO
CREATE VIEW dbo.TitleView
AS
SELECT title, author
FROM title
GO
title
title_no title author synopsis
1
2
3
Last of the Mohicans
The Village Watch-Tower
Poems
James Fenimore Cooper
Kate Douglas Wiggin
Wilfred Owen
~~~
~~~
~~~
217.
Vantagens das views
Enfatizar os dados para os utilizadores
Enfatizar somente dados importantes ou apropriados
Limitar o acesso a dados confidenciais
Mascarar a complexidade da base de dados
Ocultar a complexidade da estrutura da base de dados
Simplificar consultas complexas, incluindo consultas
distribuídas a dados heterogéneos
Simplificar a gestão de permissões dos utilizadores
Organizar dados a serem exportados para outras
aplicações
218.
Criando views
Definindo views
Restrições sobre a criação de views
Exemplo: exibindo informações de várias tabelas
219.
Definindo views
USE library
GO
CREATEVIEW dbo.UnpaidFinesView (Member, TotalUnpaidFines)
AS
SELECT member_no, (sum(fine_assessed-fine_paid))
FROM loanhist
GROUP BY member_no
HAVING SUM(fine_assessed-fine_paid) > 0
GO
USE library
SELECT *
FROM UnpaidFinesView
GO
Exemplo 1: Criando uma view
Exemplo 2: Consultando uma view
220.
Restrições sobre acriação de views
Não podem fazer referência a mais de 1024 colunas
Não é possível incluir a cláusula COMPUTE ou
COMPUTE BY
Não podem incluir as cláusulas ORDER BY, a menos
que sejam usadas com a cláusula TOP na instrução
SELECT
Não podem incluir a palavra-chave INTO
Não podem fazer referência a tabelas temporárias
Não podem ser combinadas com outras instruções
Transact-SQL num único lote
SP - StoredProcedures
Definindo procedimentos armazenados
Vantagens do uso de procedimentos armazenados
Introdução aos procedimentos armazenados
223.
Definindo procedimentos armazenados
Um procedimento armazenado é uma colecção definida
de instruções Transact-SQL
Um procedimento armazenado encapsula tarefas
repetitivas
Os procedimentos armazenados podem:
Conter instruções que executam operações
Aceitar parâmetros de entrada
Retornar um valor de status para indicar um êxito
ou uma falha
Retornar vários parâmetros de saída
224.
Vantagens do usode procedimentos armazenados
Partilhar a lógica da aplicação
Proteger detalhes das tabelas da base de dados
Fornecer mecanismos de segurança
Melhorar o desempenho
Reduzir o tráfego de rede
225.
Introdução aos triggers
Um trigger é um tipo especial de procedimento
armazenado
Um trigger é:
Associado a uma tabela
Chamado automaticamente
Não é chamado directamente
Tratado como parte da transacção que o accionou
226.
Introdução àsfunções definidas pelo utilizador
UDF - User Defined Functions
O que é uma função definida pelo utilizador?
Criando uma função definida pelo utilizador
227.
O que éuma função definida pelo utilizador?
Funções escalares
Similares a uma função interna
Retornam um valor de dados único do tipo definido por uma
série de instruções
Funções com valores de tabela de várias instruções
Semelhante a um procedimento armazenado
Mencionada como se fosse uma view
Funções com valores de tabela em linha
Retorna uma tabela que é resultado de uma única instrução
SELECT
Semelhante a uma view com parâmetros
228.
Criando umafunção definida pelo utilizador
Restrições quanto ao uso de funções definidas pelo
utilizador
Criando uma função definida pelo utilizador
USE northwind
GO
CREATE FUNCTION fn_NewRegion ( @myinput nvarchar(30) )
RETURNS nvarchar(30)
BEGIN
IF @myinput IS NULL
SET @myinput = 'Not Applicable‘
RETURN @myinput
END
GO
229.
Práticas recomendadas
Verifique asdefinições de objecto exibindo o texto com o
procedimento armazenado do sistema EXEC sp_helptext
Verifique as definições de objecto exibindo o texto com o
procedimento armazenado do sistema EXEC sp_helptext
Use as views para capturar e reutilizar consultas
Use as views para capturar e reutilizar consultas
Use procedimentos armazenados para encapsular procedimentos
complexos
Use procedimentos armazenados para encapsular procedimentos
complexos
Use funções definidas pelo utilizador para encapsular expressões
Use funções definidas pelo utilizador para encapsular expressões
Revisão
Exibindo otexto de um objeto de programação
Introdução às views
Vantagens das views
Criando views
Introdução a procedimentos armazenados
Introdução a disparadores
Introdução a funções definidas pelo usuário
Visão geral
Introduçãoàs views
Vantagens das views
Definindo views
Modificando dados através de views
Optimizando o desempenho com o uso de views
234.
Introdução às views
EmployeeView
LastnameFirstname
Davolio
Fuller
Leverling
Nancy
Andrew
Janet
Employees
EmployeeID LastName Firstname Title
1
2
3
Davolio
Fuller
Leverling
Nancy
Andrew
Janet
~~~
~~~
~~~
View de utilizador
USE Northwind
GO
CREATE VIEW dbo.EmployeeView
AS
SELECT LastName, Firstname
FROM Employees
235.
Vantagens das views
Focalizar os dados para os utilizadores
Focalizar somente em dados importantes ou
apropriados
Limitar o acesso a dados confidenciais
Mascarar a complexidade da base de dados
Ocultar estruturas complexas da base de dados
Simplificar consultas complexas, incluindo consultas
distribuídas para dados heterogéneos
Simplificar a gestão de permissões dos utilizadores
Melhorar o desempenho
Organizar dados para serem exportados para outras
aplicações
236.
Definindo views
Criando views
Exemplo: View de tabelas associadas
Alterando e eliminando views
Localizando informações sobre definições de views
Ocultando definições de views
237.
Criando views
Criandouma view
Restrições às definições de views
Não pode incluir a instrução ORDER BY
Não pode incluir a palavra-chave INTO
USE Northwind
GO
CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal)
AS
SELECT OD.OrderID,
SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
FROM [Order Details] OD
GROUP BY OD.OrderID
GO
238.
Exemplo: View detabelas associadas
OrderID
10663
10827
10427
10451
10515
CustomerID
BONAP
BONAP
PICCO
QUICK
QUICK
~~~
~~~
~~~
~~~
~~~
q
RequiredDate
1997-09-24
1998-01-26
1997-02-24
1997-03-05
1997-05-07
pp
ShippedDate
1997-10-03
1998-02-06
1997-03-03
1997-03-12
1997-05-23
Orders Customers
ShipStatusView
USE Northwind
GO
CREATE VIEW dbo.ShipStatusView
AS
SELECT OrderID, ShippedDate,
ContactName
FROM Customers c INNER JOIN Orders o
ON c.CustomerID = O.CustomerID
WHERE RequiredDate < ShippedDate
CustomerID
BONAP
PICCO
QUICK
p y
CompanyName
Bon app'
Piccolo und mehr
QUICK-Stop
ContactName
Laurence Lebihan
Georg Pipps
Horst Kloss
OrderID
10264
10271
10280
1996-08-21
1996-08-29
1996-09-11
pp
ShippedDate
1996-08-23
1996-08-30
1996-09-12
ContactName
Maria Larsson
Art Braunschweiger
Christina Berglund
239.
Alterando e eliminandoviews
Alterando views
Mantém permissões atribuídas
Faz com que as novas opções e instrução SELECT
substituam a definição existente
Eliminando views
USE Northwind
GO
ALTER VIEW dbo.EmployeeView
AS
SELECT LastName, FirstName, Extension
FROM Employees
DROP VIEW dbo.ShipStatusView
240.
Localizando informações sobredefinições de views
Localizando definições de views
Não disponível se a view foi criada com
a opção WITH ENCRYPTION
Localizando dependências de views
Lista objectos dos quais a view depende
Lista objectos que dependem de uma view
241.
Localizando definições deviews
Nomes de views
INFORMATION_SCHEMA.TABLES ou sysobjects
(objectos do sistema)
Nomes de objetos base
INFORMATION_SCHEMA.VIEW_TABLE_USAGE ou sysdepends
(dependências do sistema)
Definição de views
INFORMATION_SCHEMA.VIEWS ou syscomments
(comentários do sistema)
Colunas que estão definidas numa view
INFORMATION_SCHEMA.VIEW_COLUMN_USAGE ou syscolumns
(colunas do sistema)
sp_helptext nome_do objecto
Ocultando definições deviews
Usar a opção WITH ENCRYPTION
Não excluir entradas da tabela syscomments
USE Northwind
GO
CREATE VIEW dbo.[Order Subtotals View]
WITH ENCRYPTION
AS
SELECT OrderID,
Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100)
AS Subtotal
FROM [Order Details]
GROUP BY OrderID
244.
Modificando dados atravésde views
Não podem afectar mais de uma tabela subjacente
Não podem ser feitas em certas colunas
Poderão ocasionar erros se afectarem colunas às
quais a view não faz referência
Serão verificadas se a opção WITH CHECK OPTION
tiver sido especificada na definição da view
245.
Optimizando odesempenho com o uso de views
Considerações sobre o desempenho
Usando views indexadas
246.
Considerações sobre odesempenho
USE Northwind
GO
CREATE VIEW dbo.TopSalesView
AS
SELECT *
FROM dbo.TotalPurchaseView
WHERE Subtotal > 50000
GO
TotalPurchaseView
1 ~ ~ ~ ~
2 ~ ~ ~ ~
3 ~ ~ ~ ~
4 ~ ~ ~ ~
5 ~ ~ ~ ~
6 ~ ~ ~ ~
Customers
Customers
1 ~ ~ ~ n
2 ~ ~ ~ n
3 ~ ~ ~ y
4 ~ ~ ~ y
5 ~ ~ ~ n
6 ~ ~ ~ y
Orders
Orders
1 ~ ~ ~ n
2 ~ ~ ~ n
3 ~ ~ ~ y
4 ~ ~ ~ y
5 ~ ~ ~ n
6 ~ ~ ~ y
Order Details
Order Details
1 ~ ~ ~ ~
2 ~ ~ ~ ~
3 ~ ~ ~ ~
4 ~ ~ ~ ~
5 ~ ~ ~ ~
6 ~ ~ ~ ~
SELECT *
FROM dbo.TopSalesView
WHERE CompanyName = 'Ernst Handel'
TopSalesView
~ ~ ~
~ ~ ~
~ ~ ~
247.
Usando views indexadas
Views indexadas armazenam conjuntos de resultados
na base de dados
Criando uma view indexada
Directrizes para a criação de views indexadas
Crie views indexadas quando:
A melhoria de desempenho compensa o maior custo
de manutenção
Os dados subjacentes não são actualizados com
frequência
As consultas executam uma quantidade significativa de
associações e agregações
Restrições à criação de views indexadas
248.
Práticas recomendadas
Especifique dbocomo o proprietário quando criar views
Especifique dbo como o proprietário quando criar views
Verifique as dependências dos objectos antes de os eliminar
Verifique as dependências dos objectos antes de os eliminar
Avalie cuidadosamente se deve criar views baseadas
em views
Avalie cuidadosamente se deve criar views baseadas
em views
Nunca exclua entradas da tabela do sistema syscomments
Nunca exclua entradas da tabela do sistema syscomments
Deve desenvolver uma convenção de nomeação consistente
Deve desenvolver uma convenção de nomeação consistente
Introdução aosprocedimentos armazenados
Criando, executando e modificando procedimentos
armazenados
Usando parâmetros em procedimentos armazenados
Tratando mensagens de erro
Considerações sobre o desempenho
Visão geral
251.
Definindo procedimentosarmazenados
Processamento inicial de procedimentos armazenados
Processamento subsequente de procedimentos
armazenados
Vantagens dos procedimentos armazenados
Introdução a procedimentos armazenados
252.
Definindo procedimentos armazenados
Colecções nomeadas de instruções Transact-SQL
Encapsulamento de tarefas repetitivas
Cinco tipos (sistema, local, temporário, remoto e
estendido)
Aceitam parâmetros de entrada e retornam valores
Retornam um valor de status para indicar um êxito ou
uma falha
253.
Processamento inicial deprocedimentos
armazenados
Entradas nas tabelas
sysobjects e syscomments
Plano compilado colocado
na cache de procedimentos
Compilação
Optimização
Criação
Execução
(primeira vez ou
recompilação)
Análise
254.
Processamento subsequente deprocedimentos
armazenados
Plano de consulta Contexto de
execução
Conexão 1
8082
Conexão 2
Conexão 3
24
1003
Plano de execução recuperado
O plano não utilizado é removido
SELECT *
FROM
dbo.member
WHERE
member_no = ?
255.
Vantagens dos procedimentosarmazenados
Partilham a lógica da aplicação
Protegem os detalhes das tabelas da base de dados
Fornecem mecanismos de segurança
Melhoram o desempenho
Reduzem o tráfego de rede
256.
Criando, executandoe modificando
procedimentos armazenados
Criando procedimentos armazenados
Directrizes para a criação de procedimentos
armazenados
Executando procedimentos armazenados
Alterando e eliminando procedimentos armazenados
257.
Criando procedimentos armazenados
Criados na base de dados actual com a instrução
CREATE PROCEDURE
Podem ser encadeados até 32 níveis
Use sp_help para exibir informações
USE Northwind
GO
CREATE PROC dbo.OverdueOrders
AS
SELECT *
FROM dbo.Orders
WHERE RequiredDate < GETDATE() AND ShippedDate IS Null
GO
258.
Directrizes para acriação de procedimentos
armazenados
Utilizador dbo deve ser proprietário de todos os
procedimentos armazenados
Um procedimento armazenado para uma única tarefa
Crie, teste e depure
Evite usar o prefixo sp_ ao atribuir nomes a
procedimentos armazenados
Todos os procedimentos armazenados devem assumir
as mesmas configurações de conexão
Minimize o uso de procedimentos armazenados
temporários
Use sp_executesql em vez de EXECUTE
Nunca exclua entradas directamente da tabela do
syscomments
259.
Executando procedimentos armazenados
Executando um procedimento armazenado
isoladamente
Executando um procedimento armazenado em uma
instrução INSERT
EXEC OverdueOrders
INSERT INTO Customers
EXEC EmployeeCustomer
260.
Alterando e eliminandoprocedimentos armazenados
Alterando procedimentos armazenados
Inclua quaisquer opções em ALTER PROCEDURE
Não afecta os procedimentos armazenados encadeados
Eliminando procedimentos armazenados
Execute o procedimento armazenado sp_depends para
determinar se os objectos dependem do procedimento
USE Northwind
GO
ALTER PROC dbo.OverdueOrders
AS
SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate,
CONVERT(char(8), OrderDate, 1) OrderDate,
OrderID, CustomerID, EmployeeID
FROM Orders
WHERE RequiredDate < GETDATE() AND ShippedDate IS Null
ORDER BY RequiredDate
GO
261.
Usando parâmetrosnos procedimentos
armazenados
Usando parâmetros de entrada
Executando procedimentos armazenados com
parâmetros de entrada
Retornando valores com parâmetros de saída
262.
Usando parâmetros deentrada
Valide todos os valores de parâmetros de entrada
primeiro
Forneça valores padrão apropriados e inclua
verificações NULL
CREATE PROCEDURE dbo.[Year to Year Sales]
@BeginningDate DateTime, @EndingDate DateTime
AS
IF @BeginningDate IS NULL OR @EndingDate IS NULL
BEGIN
RAISERROR('NULL values are not allowed', 14, 1)
RETURN
END
SELECT O.ShippedDate,
O.OrderID,
OS.Subtotal,
DATENAME(yy,ShippedDate) AS Year
FROM ORDERS O INNER JOIN [Order Subtotals] OS
ON O.OrderID = OS.OrderID
WHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDate
GO
263.
Executando procedimentos armazenadoscom
parâmetros de entrada
Passando valores por nome de parâmetro
Passando valores por posição
EXEC AddCustomer 'ALFKI2', 'Alfreds
Futterkiste', 'Maria Anders', 'Sales
Representative', 'Obere Str. 57', 'Berlin',
NULL, '12209', 'Germany', '030-0074321'
EXEC AddCustomer
@CustomerID = 'ALFKI',
@ContactName = 'Maria Anders',
@CompanyName = 'Alfreds Futterkiste',
@ContactTitle = 'Sales Representative',
@Address = 'Obere Str. 57',
@City = 'Berlin',
@PostalCode = '12209',
@Country = 'Germany',
@Phone = '030-0074321'
264.
Retornando valores comparâmetros de saída
CREATE PROCEDURE dbo.MathTutor
@m1 smallint,
@m2 smallint,
@result smallint OUTPUT
AS
SET @result = @m1* @m2
GO
DECLARE @answer smallint
EXECUTE MathTutor 5,6, @answer OUTPUT
SELECT 'The result is:', @answer
The result is: 30
Resultados do
Resultados do
procedimento
armazenado
Executando o
Executando o
procedimento
armazenado
Criando o
Criando o
procedimento
armazenado
265.
Tratando mensagens deerro
A instrução RETURN sai da consulta ou do
procedimento de modo não condicional
sp_addmessage cria mensagens de erro personalizadas
@@error contém o número do erro da última
instrução executada
Instrução RAISERROR
Retorna uma mensagem de erro do sistema ou
definida pelo usuário
Define um sinalizador do sistema para registrar um erro
Considerações sobre odesempenho
System Monitor do Windows 2000
Objecto: SQL Server: Cache Manager
Objecto: SQL Statistics
SQL Profiler
Permite monitorar eventos
É possível testar cada instrução do procedimento
armazenado
268.
Práticas recomendadas
Crie cadaprocedimento armazenado para realizar uma
única tarefa
Crie cada procedimento armazenado para realizar uma
única tarefa
Valide os dados antes de iniciar as transacções.
Valide os dados antes de iniciar as transacções.
Verifique os parâmetros de entrada
Verifique os parâmetros de entrada
Use as mesmas configurações de conexão para todos os
procedimentos armazenados
Use as mesmas configurações de conexão para todos os
procedimentos armazenados
Para ocultar o texto de procedimentos armazenados,
use a opção WITH ENCRYPTION
Para ocultar o texto de procedimentos armazenados,
use a opção WITH ENCRYPTION
Visão geral
Oque é uma função definida pelo utilizador?
Estabelecendo funções definidas pelo utilizador
Exemplos de funções definidas pelo utilizador
271.
O que éuma função definida pelo utilizador?
Funções escalares
Semelhantes a funções internas
Funções com valor de tabela e várias instruções
Conteúdo semelhante a um procedimento armazenado
Referenciadas como uma view
Funções com valor de tabela in-line
Semelhante a uma view com parâmetros
Retorna uma tabela como o resultado de uma única
instrução SELECT
272.
Estabelecendo funçõesdefinidas pelo utilizador
Criando uma função definida pelo utilizador
Criando uma função com vinculação de esquemas
Definindo permissões para funções definidas pelo
utilizador
Alterando e descartando funções definidas pelo
utilizador
273.
Criando umafunção
Restrições às funções
Criando uma função definida pelo utilizador
USE Northwind
GO
CREATE FUNCTION fn_NewRegion
(@myinput nvarchar(30))
RETURNS nvarchar(30)
BEGIN
IF @myinput IS NULL
SET @myinput = 'Not Applicable'
RETURN @myinput
END
274.
Criando uma funçãocom vinculação de esquemas
As funções definidas pelo utilizador e views às quais a
função faz referência também são vinculadas a
esquema
Os objectos não são referenciados com um nome de
duas partes
A função e os objectos pertencem à mesma base
de dados
Ter a permissão REFERENCE em objectos necessários
275.
Definindo permissões parafunções definidas pelo
utilizador
Permissão CREATE FUNCTION necessária
Permissão EXECUTE necessária
Permissão REFERENCE necessária em tabelas, views
ou funções às quais ela faz referência
O proprietário da tabela também deve ser proprietário
da função para usá-la na instrução CREATE TABLE ou
ALTER TABLE
276.
Alterando e eliminandofunções definidas pelo
utilizador
Alterando funções
Mantém permissões atribuídas
Faz com que a nova definição de função substitua a
definição existente
Eliminando funções
ALTER FUNCTION dbo.fn_NewRegion
<Novo conteúdo de função>
DROP FUNCTION dbo.fn_NewRegion
277.
Exemplos defunções definidas pelo utilizador
Usando uma função escalar definida pelo utilizador
Exemplo de uma função escalar definida pelo utilizador
Usando uma função com valor de tabela e várias
instruções
Exemplo de função com valor de tabela e várias
instruções
Usando uma função com valor de tabela in-line
Exemplo de uma função com valor de tabela in-line
278.
Usando uma funçãoescalar definida pelo utilizador
A cláusula RETURNS especifica o tipo de dados
A função é definida em um bloco BEGIN...END
O tipo de retorno poderá ser qualquer tipo de dado,
excepto text, ntext, image, cursor ou timestamp
279.
Criando afunção
Chamando a função
Exemplo de uma função escalar definida pelo
utilizador
USE Northwind
GO
CREATE FUNCTION fn_DateFormat
(@indate datetime, @separator char(1))
RETURNS Nchar(20)
AS
BEGIN
RETURN
CONVERT(Nvarchar(20), datepart(mm,@indate))
+ @separator
+ CONVERT(Nvarchar(20), datepart(dd, @indate))
+ @separator
+ CONVERT(Nvarchar(20), datepart(yy, @indate))
END
SELECT dbo.fn_DateFormat(GETDATE(), ':')
280.
Usando uma funçãocom valor de tabela e várias
instruções
BEGIN e END delimitam o corpo da função
A cláusula RETURNS especifica table como o tipo de
dados
A cláusula RETURNS define o nome e o formato da
tabela
281.
Exemplo de funçãocom valor de tabela e várias
instruções
Criando a função
Chamando a função
USE Northwind
GO
CREATE FUNCTION fn_Employees (@length nvarchar(9))
RETURNS @fn_Employees table
(EmployeeID int PRIMARY KEY NOT NULL,
[Employee Name] nvarchar(61) NOT NULL)
AS
BEGIN
IF @length = 'ShortName'
INSERT @fn_Employees SELECT EmployeeID, LastName
FROM Employees
ELSE IF @length = 'LongName'
INSERT @fn_Employees SELECT EmployeeID,
(FirstName + ' ' + LastName) FROM Employees
RETURN
END
SELECT * FROM dbo.fn_Employees('LongName')
Ou
SELECT * FROM dbo.fn_Employees('ShortName')
282.
Usando uma funçãocom valor de tabela in-line
O conteúdo da função é uma instrução SELECT
Não use BEGIN e END
RETURN especifica table como o tipo de dados
O formato é definido pelo conjunto de resultados
283.
Exemplo de umafunção com valor de tabela in-line
Criando a função
Chamando a função usando um parâmetro
USE Northwind
GO
CREATE FUNCTION fn_CustomerNamesInRegion
( @RegionParameter nvarchar(30) )
RETURNS table
AS
RETURN (
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = @RegionParameter
)
SELECT * FROM fn_CustomerNamesInRegion(N'WA')
284.
Práticas recomendadas
Use funçõesde várias instruções em vez de
procedimentos armazenados que retornam tabelas
Use funções de várias instruções em vez de
procedimentos armazenados que retornam tabelas
Use funções in-line para filtrar views indexadas
Use funções in-line para filtrar views indexadas
Use funções escalares complexas em conjuntos de
resultados pequenos
Use funções escalares complexas em conjuntos de
resultados pequenos
Use funções in-line para criar views usando parâmetros
Use funções in-line para criar views usando parâmetros
Visão geral
Introduçãoaos triggers
Definindo triggers
Como funcionam os triggers
Exemplos de triggers
Considerações sobre o desempenho
287.
Introdução aostriggers
O que são triggers?
Utilizações de triggers
Considerações sobre o uso de triggers
288.
O que sãotriggers?
Associados a uma tabela
Chamados automaticamente
Não podem ser chamados directamente
São parte de uma transacção
289.
Utilizações de triggers
Alterações em cascata em tabelas relacionadas duma
base de dados
Impor uma integridade de dados mais complexa do que
uma restrição CHECK
Definir mensagens de erro personalizadas
Manter dados desnormalizados
Comparar os estados anteriores e posteriores dos
dados que estão a ser modificados
290.
Considerações sobre ouso de triggers
Os triggers são reactivos; as restrições são
pró-activas
As restrições são verificadas primeiro
As tabelas podem conter vários triggers para
uma acção
Os proprietários das tabelas podem designar o primeiro
e o último trigger a ser accionado
Os proprietários das tabelas devem ter permissão para
executar todas as instruções definidas pelo trigger
Os proprietários das tabelas não podem criar triggers
AFTER em views ou tabelas temporárias
Criando triggers
Requerpermissões apropriadas
Não pode conter certas instruções
Use Northwind
GO
CREATE TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 1
BEGIN
RAISERROR(
'You cannot delete more than one employee at a time.', 16, 1)
ROLLBACK TRANSACTION
END
293.
Alterando e eliminandotriggers
Alterando um trigger
Altera a definição sem eliminar o trigger
Desactivando ou activando um trigger
Eliminando um trigger
USE Northwind
GO
ALTER TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 6
BEGIN
RAISERROR(
'You cannot delete more than six employees at a time.', 16, 1)
ROLLBACK TRANSACTION
END
294.
Como funcionamos triggers
Como funciona um trigger INSERT
Como funciona um trigger DELETE
Como funciona um trigger UPDATE
Como funciona um trigger INSTEAD OF
Como funcionam os triggers encadeados
Triggers recursivos
295.
Como funciona umtrigger INSERT
Instrução INSERT para uma tabela com um trigger
INSERT definido
INSERT [Order Details] VALUES
(10525, 2, 19.00, 5, 0.2)
Order Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24
Discount
0.2
0.15
0.0
Instrução INSERT registada
inserted
10525 2 19.00 5 0.2
5
19.00
2 0.2
10525
As acções de TRIGGER são executadas
Order Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24
Discount
0.2
0.15
0.0
5
19.00
2 0.2
10523
Trigger Code:
USE Northwind
CREATE TRIGGER OrdDet_Insert
ON [Order Details]
FOR INSERT
AS
UPDATE P SET
UnitsInStock = (P.UnitsInStock – I.Quantity)
FROM Products AS P INNER JOIN Inserted AS I
ON P.ProductID = I.ProductID
Produtos
ProductID UnitsInStock … …
1
2
3
4
15
10
65
20
2 15
UPDATE P SET
UnitsInStock = (P.UnitsInStock – I.Quantity)
FROM Products AS P INNER JOIN Inserted AS I
ON P.ProductID = I.ProductID
Instrução INSERT para uma tabela com um
trigger INSERT definido
Instrução INSERT registada
Acções de trigger executadas
1
2
3
296.
Como funciona umtrigger DELETE
Instrução DELETE para uma tabela com um trigger
DELETE definido
Deleted
4 Dairy Products Cheeses 0x15…
Instrução DELETE registada
Categories
CategoryID
1
2
3
CategoryName
Beverages
Condiments
Confections
Description
Soft drinks, coffees…
Sweet and savory …
Desserts, candies, …
Picture
0x15…
0x15…
0x15…
0x15…
Cheeses
Dairy Products
4
DELETE Categories
WHERE
CategoryID = 4
USE Northwind
CREATE TRIGGER Category_Delete
ON Categories
FOR DELETE
AS
UPDATE P SET Discontinued = 1
FROM Products AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID
Acções do trigger executadas
Products
ProductID Discontinued … …
1
2
3
4
0
0
0
0
2 1
UPDATE P SET Discontinued = 1
FROM Products AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID
Instrução DELETE para uma tabela
com um trigger DELETE definido
Instrução DELETE registada
Acções do trigger executadas
1
2
3
297.
Como funciona umtrigger UPDATE
Instrução UPDATE para uma tabela com um trigger UPDATE
definido
UPDATE Employees
SET EmployeeID = 17
WHERE EmployeeID = 2
Instrução UPDATE registada como INSERT e instruções DELETE
inserted
17 Fuller Andrew Vice Pres. ~~~
deleted
2 Fuller Andrew Vice Pres. ~~~
Employees
EmployeeID LastName FirstName
FirstName Title HireDate
1
2
3
4
Davolio
Barr
Leverling
Peacock et
Nancy
Andrew
Janet
Margaret
.
.
.
Sales Rep.
R
Sales Rep.
Sales Rep.
~~~
~~~
~~~
~~~
2 Fuller Andrew Vice Pres. ~~~
As acções de TRIGGER são executadas
USE Northwind
GO
CREATE TRIGGER Employee_Update
ON Employees
FOR UPDATE
AS
IF UPDATE (EmployeeID)
BEGIN TRANSACTION
RAISERROR ('Transaction cannot be processed.
***** Employee ID number cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
AS
IF UPDATE (EmployeeID)
BEGIN TRANSACTION
RAISERROR ('Transaction cannot be processed.
***** Employee ID number cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
Transaction cannot be processed.
***** Member number cannot be modified
Employees
EmployeeID LastName FirstName
FirstName Title HireDate
1
2
3
4
Davolio
Barr
Leverling
Peacock et
Nancy
Andrew
Janet
Margaret
.
.
.
Sales Rep.
R
Sales Rep.
Sales Rep.
~~~
~~~
~~~
~~~
2 Fuller Andrew Vice Pres. ~~~
Instrução UPDATE para uma tabela com um
trigger UPDATE definido
Instrução UPDATE registada com
instruções INSERT e DELETE
Acções do trigger executadas
1
2
3
298.
Como funciona umtrigger INSTEAD OF
Crie uma view que combine duas ou mais tabelas
CREATE VIEW
Customers AS
SELECT *
FROM CustomersMex
UNION
SELECT *
FROM CustomersGer
CustomersMex
CustomerID CompanyName
CompanyName Country Phone …
ANATR
ANTON
CENTC
Ana Trujill…
Antonio M…
Centro Co…
Mexico
Mexico
Mexico
(5) 555-4729
(5) 555-3932
(5) 555-3392
~~~
~~~
~~~
CustomersGer
CustomerID CompanyName
CompanyName Country Phone …
ALFKI
BLAUS
DRACD
Alfreds Fu…
Blauer Se…
Drachenb…
Germany
Germany
Germany
030-0074321
0621-08460
0241-039123
~~~
~~~
~~~
O trigger INSTEAD
OF direcciona a
actualização para
a tabela base
Customers
CustomerID CompanyName
CompanyName Country Phone …
ALFKI
ANATR
ANTON
Alfreds Fu…
Ana Trujill…
Antonio M…
Germany
Mexico
Mexico
030-0074321
(5) 555-4729
(5) 555-3932
~~~
~~~
~~~
A inserção original
na view
Customers não
ocorre
UPDATE é feito
para a view
ALFKI Alfreds Fu… Germany 030-0074321 ~~~
ALFKI Alfreds Fu… Germany 030-0074321 ~~~
O trigger INSTEAD OF pode estar numa tabela
ou view
A acção que inicia o trigger NÃO ocorre
Permite actualizações em views não actualizáveis
anteriormente
1
2
3
299.
Como funcionam ostriggers encadeados
UnitsInStock + UnitsOnOrder
é < ReorderLevel para ProductID 2
OrDe_Update
Colocar uma ordem faz com
que o trigger OrDe_Update
seja executado
Executa uma instrução
UPDATE na tabela Products
InStock_Update
Products
ProductID UnitsInStock … …
1
3
4
15
10
65
20
O trigger InStock_Update é
executado
Envia mensagem
Order_Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24
Discount
0.2
0.15
0.0
10525 19.00
2 0.2
5
2 15
300.
Triggers recursivos
Activandoum trigger de modo recursivo
Tipos de triggers recursivos
Recursividade directa ocorre quando um trigger acciona
e executa uma acção que faz com que o mesmo trigger
seja accionado novamente
Recursividade indirecta ocorre quando um trigger
acciona e executa uma acção que faz com que um
trigger noutra tabela seja accionado
Determinando se triggers recursivos devem ou não ser
usados
301.
Exemplos detriggers
Impondo a integridade dos dados
Impondo regras de negócios
302.
Impondo a integridadedos dados
CREATE TRIGGER BackOrderList_Delete
ON Products FOR UPDATE
AS
IF (SELECT BO.ProductID FROM BackOrders AS BO JOIN
Inserted AS I ON BO.ProductID = I.Product_ID
) > 0
BEGIN
DELETE BO FROM BackOrders AS BO
INNER JOIN Inserted AS I
ON BO.ProductID = I.ProductID
END
Products
ProductID UnitsInStock … …
1
3
4
15
10
65
20
2 15 Actualizado
BackOrders
ProductID UnitsOnOrder …
1
12
3
15
10
65
2 15
O trigger
O trigger
exclui o registro
303.
Products
ProductID UnitsInStock ……
1
3
4
15
10
65
20
Impondo regras de negócios
Os produtos com pedidos importantes não podem ser excluídos
A instrução DELETE é
executada na tabela Product
O código do trigger
verifica a tabela Order Details
Order Details
OrderID
10522
10523
10524
10525
ProductID
10
2
41
7
UnitPrice
31.00
19.00
9.65
30.00
Quantity
7
9
24
Discount
0.2
0.15
0.0
9
A transacção
é revertida
Products
ProductID UnitsInStock … …
1
2
3
4
15
10
65
20
2 0
IF (Select Count (*)
FROM [Order Details] INNER JOIN deleted
ON [Order Details].ProductID = Deleted.ProductID
) > 0
ROLLBACK TRANSACTION
'Transaction cannot be processed'
'This product has order history.'
304.
Considerações sobre odesempenho
Os triggers funcionam com rapidez, pois as tabelas
Inserted e Deleted encontram-se na cache
O tempo de execução é determinado pelo:
Número de tabelas referenciadas
Número de registos afectados
As acções contidas nos triggers consistem numa parte
implícita de uma transacção
305.
Práticas recomendadas
Mantenha asinstruções da definição do trigger o mais
simples possível
Mantenha as instruções da definição do trigger o mais
simples possível
Minimize o uso de instruções ROLLBACK nos triggers
Minimize o uso de instruções ROLLBACK nos triggers
Use triggers somente quando necessário
Use triggers somente quando necessário
Inclua instruções de verificação de fim da recursividade nas
definições de triggers recursivos
Inclua instruções de verificação de fim da recursividade nas
definições de triggers recursivos