Você está na página 1de 27

MS SQL Server 2012

Exame 70-461
Agenda
● Usando tabelas derivadas;
● Expressões de tabelas comuns(CTE);
● Usando Views;
● Funções com valor de tabela in-line;
● Lab
Tabelas Derivadas

● São consultas realizadas dentro da


clausula FROM de uma consulta externa,
é necessário que todos os campos
calculados sejam nomeados, a consulta
deve estar contida entre parênteses e
possuir um apelido.
Tabelas Derivadas

SELECT B.BusinessEntityID, B.JobTitle,


A.QtdeLinhas
FROM (SELECT E.JobTitle, COUNT(*)
QtdeLinhas
FROM HumanResources.Employee E
GROUP BY JobTitle) A
INNER JOIN HumanResources.Employee B on
A.JobTitle=B.JobTitle
Expressões de tabelas Comuns
(CTE)
● Uma CTE, por definição, é um conjunto de dados temporário
que recebe um nome e que é derivado de consultas simples e
pode ser usado em declarações de leitura, escrita, atualização
ou exclusão de dados (SELECT/INSERT/UPDATE/DELETE).

● Um detalhe fundamental é que uma CTE existirá apenas até a


execução da próxima declaração SQL. Depois disso, este
objeto temporário não existe mais.

● A declaração de uma CTE exige o uso da palavra reservada


WITH
Expressões de tabelas Comuns
(CTE)
● SINTAXE

WITH <nome_etc>[(<lista_colunas_destino>)]
AS
(
<consulta_interna_define_ETC>
)
<ETC_na_consulta_externa>;
Expressões de tabelas Comuns
(CTE)

WITH TopSales (SalesPersonID, NumSales)


AS (
SELECT SalesPersonID, Count(*) FROM
Sales.SalesOrderHeader GROUP BY SalesPersonID
)
SELECT TOP(5) * FROM TopSales WHERE SalesPersonID IS
NOT NULL ORDER BY NumSales DESC
Expressões de tabelas Comuns
(CTE) Recursivas
● Crie o âncora membro consulta: O primeiro
passo na criação de uma consulta recursiva é a
criação da âncora membro consulta. O âncora
membro consulta formas o topo da árvore
recursão. Ele determina os nomes das colunas,
a menos que você precisar deles no parâmetro
opcional column_list do COM declaração.
Expressões de tabelas Comuns
(CTE) Recursivas
● Acrescentar o operador UNION ALL: O
segundo passo na criação de uma consulta
recursiva é a inclusão do operador UNION ALL
na consulta. O operador UNION ALL é
essencial para ligar os dois conjuntos resultado
da consulta. O operador UNION ALL é o único
operador que é permitido fixar em uma consulta
recursiva.
Expressões de tabelas Comuns
(CTE) Recursivas
● Crie o recursiva membro consulta: O passo final na
criação de uma consulta recursiva é a criação do
recursiva membro consulta. A consulta deve referência
recursiva membro do CTE como uma das tabelas na
consulta SELECT. Além disso, o número de colunas no
recursiva membro consulta deve ser igual ao número
de colunas da âncora membro consulta. A recursão
continua até o recursiva membro consulta deixa de
produzir os conjuntos de resultados.
Expressões de tabelas Comuns
(CTE) Recursivas
● Ao escrever queries recursivas, um erro na
programação recursiva membro poderá resultar na
consulta inscrição de um ciclo infinito. O número infinito
de iterações, então monopolizar os recursos do sistema
e impacto desempenho. Para limitar o nível de
recursão, você pode especificar a opção
MAXRECURSION no CTE consulta. Se o recursiva
membro exceder esse limite, ocorre uma exceção e
não a consulta. O valor padrão para MAXRECURSION
é 100.
Expressões de tabelas Comuns
(CTE) Recursivas
WITH Managers AS
(
SELECT EmployeeID, LoginID, Title, ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = 109
UNION ALL
SELECT e.EmployeeID , e.LoginID, e.Title, e.ManagerID
FROM HumanResources.Employee e
INNER JOIN Managers mgr
ON e.ManagerID = mgr.EmployeeID
)
SELECT * FROM Managers
Views

● É um objeto ou tabela virtual cujo conjunto de


resultados é extraído de uma query.
● As views muitas vezes, são usadas como uma
camada de abstração por desenvolvedores de
banco de dados. Às vezes, também são usadas
para dar segurança aos dados de diversas
maneiras.
Views
● Não se dever utilizar SELECT * em views. Caso
SELECT * seja usado, quando os esquemas de
tabela mudarem, o mesmo acontecerá com a
listagem de colunas das views. Ao se escrever
queries (consultas), somente as colunas exigidas
devem ser retornadas.
● Não se dever usar ORDER BY em views, pois não
serão válidas; só é válido quando usado com TOP,
OFFSET ou FOR XML. Nesse caso, ORDER BY é
usado para determinar quais linhas serão retornadas.
Views

● SINTAXE:

CREATE VIEW VW_NOME_DA_VIEW


AS
CONSULTA_SQL
Views com ENCRYPTION
● A opção ENCRYPTION é disponibilizada
quando você cria ou altera views, Stored
Procedures, Triggers e funções definidas pelo
usuario. A opção ENCRYPTION informa que o
SQL armazena internamente o texto com a
definição do objeto em um formato ofuscado.

SELECT
OBJECT_DEFINITION(OBJECT_ID(‘NOME_VIEW’))
Views com ENCRYPTION
● SINTAXE:

CREATE VIEW VW_NOME_DA_VIEW


WITH ENCRYPTION
AS
CONSULTA_SQL

SELECT
OBJECT_DEFINITION(OBJECT_ID(‘NOME_VIEW’))
Views com SCHEMABINDING
● Essa opção esta disponível para views de
funções definidas pelo usuario(FDUs) e associa
o esquema de objetos e colunas referenciados
ao esquema de objeto da referencia. Isso quer
dizer que o objeto referencia não pode ser
apagado ou alterado.
Views com SCHEMABINDING

● SINTAXE:
CREATE VIEW VW_NOME_DA_VIEW
WITH SCHEMABINDING
AS
CONSULTA_SQL
Views com CHECK OPTION

● É usada para impedir a modificação


na view que entrem em conflito com
o filtro da view
Views com CHECK OPTION

● SINTAXE:
CREATE VIEW VW_NOME_DA_VIEW
AS
CONSULTA_SQL
WHERE FILTRO = FILTRO
WITH CHECK OPTION
Funções
● Funções são códigos T-SQL podem
aceitar parâmetros, efetuar cálculos
lógicos e complexos, e retornar dados.

● Escalares: Retornam um único valor.

● Table-Valued: Retornam um conjunto de


resultados.
Funções
● Limitações das funções:

● Não se pode usar um bloco Try…Catch


● Elas não podem retornar tipos de dados text,
ntext, image, cursor ou timestamp.
● Funções definidas pelo usuário (FDU) não
podem mudar o estado do banco.
● Os uso de funções dentro de um SELECT pode
afetar negativamente o desempenho da query.
Função Escalar
CREATE FUNCTION NOME_DA_FUNCTION
(
@PARAMETRO TIPO_PARAMETRO
)
RETURNS INT
AS
BEGIN
DECLARE @PARAMETRO_CONSULTA TIPO_PARAMETRO

SELECT @PARAMETRO_CONSULTA = CALCULO_PARA_SER_RETORNADO


FROM TABELA
WHERE FILTRO

RETURN @PARAMETRO_CONSULTA
END
GO
Função Table-Valued
CREATE FUNCTION NOME_DA_FUNCTION (@PARAMETRO
TIPO_PARAMETRO)
RETURNS TABLE
AS
RETURN
(
SELECT CAMPO1,CAMPO2,CAMPO3,CAMPO4
FROM TABELA
WHERE CAMPO1 = @PARAMETRO
)
GO
Chamando uma Função
● Escalar:
SELECT
DBO.NOME_DA_FUNCAO(PARAMETRO_FUNCAO)

● Table-Valued:
SELECT * FROM
NOME_DA_FUNCAO(PARAMETRO_FUNCAO)
Lab….