Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Ponto de extremidade de análise de SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
Banco de Dados SQL no Microsoft Fabric
Cria uma tabela virtual cujo conteúdo (colunas e linhas) é definido por uma consulta. Use esta instrução para criar uma exibição dos dados em uma ou mais tabelas no banco de dados. Por exemplo, uma exibição pode ser usada para as finalidades a seguir:
Para focalizar, simplificar e personalizar a percepção que cada usuário tem do banco de dados.
Como um mecanismo de segurança permitindo que os usuários acessem dados por meio da exibição, sem conceder permissões aos usuários para acessar diretamente as tabelas base subjacentes.
Para fornecer uma interface compatível com versões anteriores para emular uma tabela cujo esquema foi alterado.
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe para SQL Server e Banco de Dados SQL do Azure.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Sintaxe para Azure Synapse Analytics e Parallel Data Warehouse.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Sintaxe para o Microsoft Fabric Data Warehouse e o ponto de extremidade de análise de SQL.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Argumentos
OU ALTER
Aplica-se a: Banco de Dados SQL do Azure e SQL Server (começando com SQL Server 2016 (13.x) SP1).
Altera condicionalmente a exibição somente se ela já existe.
schema_name
É o nome do esquema ao qual a exibição pertence.
view_name
É o nome da exibição. Os nomes de exibição devem seguir as regras para identificadores. A especificação do nome do proprietário da exibição é opcional.
coluna
É o nome a ser usado para uma coluna em uma exibição. Um nome de coluna é necessário somente quando uma coluna é derivada de uma expressão aritmética, uma função ou uma constante; quando duas ou mais colunas podem ter o mesmo nome, normalmente por causa de uma junção; ou quando uma coluna em um modo de exibição é especificada um nome diferente do da coluna da qual ela é derivada. Os nomes de coluna também podem ser atribuídos na instrução SELECT
.
Se a coluna não for especificada, as colunas de exibição adquirirão os mesmos nomes que as colunas na SELECT
instrução.
Observação
Nas colunas do modo de exibição, as permissões para um nome de coluna se aplicam em uma CREATE VIEW
ou ALTER VIEW
instrução, independentemente da origem dos dados subjacentes. Por exemplo, se as permissões forem concedidas na SalesOrderID
coluna em uma instrução CREATE VIEW, uma instrução ALTER VIEW
poderá nomear a SalesOrderID
coluna com um nome de coluna diferente, como OrderRef
, e ainda ter as permissões associadas ao modo de exibição usando SalesOrderID
.
COMO
Especifica as ações que a exibição deve executar.
select_statement
A SELECT
instrução que define a exibição. A instrução pode usar mais de uma tabela e outras exibições. As permissões apropriadas são necessárias para selecionar entre os objetos referenciados na SELECT
cláusula da exibição que é criada.
Uma exibição não precisa ser um subconjunto das linhas e colunas de uma tabela específica. Um modo de exibição pode ser criado que usa mais de uma tabela ou outros modos de exibição com uma SELECT
cláusula de qualquer complexidade.
Em uma definição de exibição indexada, a SELECT
instrução deve ser uma única instrução de tabela ou uma multitable JOIN
com agregação opcional.
As SELECT
cláusulas em uma definição de exibição não podem incluir:
Uma
ORDER BY
cláusula, a menos que haja também umaTOP
cláusula na lista de seleção daSELECT
instruçãoImportante
A
ORDER BY
cláusula é usada apenas para determinar as linhas que são retornadas pelaTOP
cláusula ouOFFSET
na definição de exibição. AORDER BY
cláusula não garante resultados ordenados quando a exibição é consultada, a menos queORDER BY
também seja especificada na própria consulta.A palavra-chave
INTO
A
OPTION
cláusulaUma referência para uma tabela temporária ou uma variável de tabela.
Como select_statement usa a SELECT
instrução, é válido usar dicas de junção e dicas de tabela, conforme especificado na FROM
cláusula. Para obter mais informações, confira FROM (Transact-SQL) e SELECT (Transact-SQL).
Funções e várias SELECT
instruções separadas por UNION
ou UNION ALL
podem ser usadas em select_statement.
OPÇÃO CHECK
Força que todas as instruções de modificação de dados sejam executadas em relação à exibição para seguir o conjunto de critérios dentro da select_statement. Quando uma linha é modificada por meio de uma exibição, garante WITH CHECK OPTION
que os dados permaneçam visíveis por meio da exibição após a modificação ser confirmada.
Observação
O CHECK OPTION
único se aplica às atualizações feitas por meio do modo de exibição. Ela não se aplica a nenhuma atualização executada diretamente nas tabelas subjacentes de uma exibição.
ENCRIPTAÇÃO
Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
Criptografa as entradas em sys.syscomments que contêm o texto da CREATE VIEW
instrução. O uso WITH ENCRYPTION
impede que a exibição seja publicada como parte da replicação do SQL Server.
SCHEMABINDING
Associa a exibição ao esquema da tabela ou tabelas subjacentes. Quando SCHEMABINDING
especificado, a tabela base ou as tabelas não podem ser modificadas de uma forma que afete a definição de exibição. A própria definição da exibição, primeiro, deve ser modificada ou descartada para remover as dependências na tabela a ser modificada. Quando você usa SCHEMABINDING
, o select_statement deve incluir os nomes de duas partes (esquema.object) de tabelas, exibições ou funções definidas pelo usuário que são referenciadas. Todos os objetos referenciados devem estar no mesmo banco de dados.
As exibições ou tabelas que participam de uma exibição criada com a cláusula SCHEMABINDING não podem ser descartadas, a menos que a exibição seja descartada ou alterada de modo a não ter mais associação de esquema. Caso contrário, o Mecanismo de Banco de Dados gera um erro. Além disso, a execução de ALTER TABLE
instruções em tabelas que participam de exibições que têm associação de esquema falha quando essas instruções afetam a definição de exibição.
VIEW_METADATA
Especifica que a instância do SQL Server retornará às APIs DB-Library, ODBC e OLE DB as informações de metadados sobre a exibição, em vez da tabela ou tabelas base, quando metadados do modo de procura forem solicitados para uma consulta que faz referência à exibição. Metadados do modo de procura são metadados adicionais que a instância do SQL Server retorna para essas APIs do lado do cliente. Esses metadados permitem que as APIs do lado do cliente implementem cursores atualizáveis do lado do cliente. Os metadados do modo de procura incluem informações sobre a tabela base às quais as colunas do conjunto de resultados pertencem.
Para exibições criadas com VIEW_METADATA
, os metadados do modo de navegação retornam o nome da exibição e não os nomes de tabela base quando ele descreve colunas do modo de exibição no conjunto de resultados.
Quando um modo de exibição é criado usando WITH VIEW_METADATA
, todas as suas colunas, exceto uma coluna de carimbo de data /hora, são atualizáveis se a exibição tiver INSTEAD OF INSERT
ou INSTEAD OF UPDATE
disparar. Para obter mais informações sobre exibições atualizáveis, consulte Comentários.
Comentários
A exibição só pode ser criada no banco de dados atual. A CREATE VIEW
instrução deve ser a primeira em um lote de consulta. Uma exibição pode ter, no máximo, 1.024 partições.
Ao fazer uma consulta através de uma exibição, o Mecanismo de Banco de Dados verifica se todos os objetos de banco de dados referenciados em algum lugar da instrução existem, se são válidos no contexto da instrução e se as instruções de modificação de dados não violam nenhuma regra de integridade de dados. Uma verificação que falha retorna uma mensagem de erro. Uma verificação com êxito traduz a ação em uma ação na tabela ou tabelas subjacentes.
Se uma exibição depender de uma tabela ou exibição descartada, o Mecanismo de Banco de Dados produzirá uma mensagem de erro quando alguém tentar usá-la. Se uma nova tabela ou exibição for criada e a estrutura da tabela não for alterada na tabela base anterior para substituir a descartada, a exibição se tornará utilizável novamente. Se a nova tabela ou estrutura de exibição for alterada, a exibição deverá ser descartada e recriada.
Se uma exibição não for criada com a SCHEMABINDING
cláusula, execute sp_refreshview quando forem feitas alterações nos objetos subjacentes à exibição que afetam a definição da exibição. Caso contrário, a exibição poderá gerar resultados inesperados quando consultada.
Quando uma exibição é criada, as informações sobre ela são armazenadas nas seguintes exibições do catálogo: sys.views, sys.columns e sys.sql_expression_dependencies. O texto da CREATE VIEW
instrução é armazenado na exibição de catálogo sys.sql_modules .
Uma consulta que usa um índice em uma exibição definida com expressões numéricas ou flutuantes pode ter um resultado diferente de uma consulta semelhante que não usa o índice na exibição. Essa diferença pode ser causada por erros de arredondamento durante INSERT
, DELETE
ou UPDATE
ações em tabelas subjacentes.
O Mecanismo de Banco de Dados salva as configurações de SET QUOTED_IDENTIFIER
e SET ANSI_NULLS
quando uma exibição é criada. Essas configurações originais são usadas para analisar a exibição quando a ela é usada. Portanto, todas as configurações de sessão do cliente para SET QUOTED_IDENTIFIER
e SET ANSI_NULLS
não afetam a definição de exibição quando a exibição é acessada.
No Azure Synapse Analytics, as exibições não dão suporte à associação de esquema. Portanto, se forem feitas alterações nos objetos subjacentes, você deverá remover e recriar a exibição para atualizar os metadados subjacentes. Para saber mais, confira Exibições T-SQL com pool de SQL dedicado e pool de SQL sem servidor no Azure Synapse Analytics.
No Azure Synapse Analytics, não há suporte para exibições atualizáveis, gatilhos DML (de qualquer tipo AFTER
ou INSTEAD OF
) e exibições particionadas. Para saber mais, confira Exibições T-SQL com pool de SQL dedicado e pool de SQL sem servidor no Azure Synapse Analytics.
No Azure Synapse Analytics, não há suporte para exibições particionadas. Para saber mais, confira Exibições T-SQL com pool de SQL dedicado e pool de SQL sem servidor no Azure Synapse Analytics.
No banco de dados SQL do Fabric, as exibições podem ser criadas, mas não são espelhadas no Fabric OneLake. Para obter mais informações, consulte Limitações do espelhamento de banco de dados SQL do Fabric.
Exibições atualizáveis
É possível modificar os dados de uma tabela base subjacente através de uma exibição, contanto que as seguintes condições sejam verdadeiras:
Todas as modificações, incluindo
UPDATE
,INSERT
eDELETE
instruções, devem fazer referência a colunas de apenas uma tabela base.As colunas a serem modificadas na exibição devem referenciar diretamente os dados subjacentes das colunas da tabela. As colunas não podem ser derivadas de qualquer outro modo, como pelo seguinte:
Uma função de agregação:
AVG
, ,COUNT
,SUM
,MIN
,MAX
,GROUPING
,STDEV
, ,STDEVP
,VAR
eVARP
.Uma computação. A coluna não pode ser computada de uma expressão que utiliza outras colunas. As colunas formadas com o uso dos operadores de conjunto UNION, UNION ALL, CROSSJOIN, EXCEPT e INTERSECT resultam em uma computação e também não são atualizáveis.
As colunas que estão sendo modificadas não são afetadas por
GROUP BY
HAVING
cláusulas ouDISTINCT
cláusulas.TOP não é usado em nenhum lugar no select_statement do modo de exibição junto com a
WITH CHECK OPTION
cláusula.
As restrições anteriores aplicam-se a todas as subconsultas da cláusula FROM da exibição, exatamente como se aplicam à própria exibição. Em geral, o Mecanismo de Banco de Dados deve ser capaz de rastrear sem ambiguidade as modificações da definição da exibição em uma tabela base. Para obter mais informações, confira Modificar dados por meio de uma exibição.
Se as restrições anteriores impediram a modificação de dados direta através de uma exibição, considere as seguintes opções:
Gatilhos INSTEAD OF
INSTEAD OF
gatilhos podem ser criados em um modo de exibição para tornar uma exibição atualizável. OINSTEAD OF
gatilho é executado em vez da instrução de modificação de dados na qual o gatilho é definido. Esse gatilho deixa o usuário especificar o conjunto de ações que devem acontecer para processar a instrução de modificação de dados. Portanto, se houver umINSTEAD OF
gatilho para uma exibição em uma instrução de modificação de dados específica (INSERT
ouUPDATE
DELETE
), a exibição correspondente será atualizável por meio dessa instrução. Para obter mais informações sobreINSTEAD OF
gatilhos, consulte Gatilhos DML.Exibições particionadas
Se a exibição for uma exibição particionada, ela será atualizável, sujeita a determinadas restrições. Quando necessário, o Mecanismo de Banco de Dados distingue as exibições particionadas locais como as exibições nas quais todas as tabelas participantes e a exibição estão na mesma instância do SQL Server, e as exibições particionadas distribuídas como as exibições nas quais pelo menos uma das tabelas na exibição reside em um servidor diferente ou servidor remoto.
Exibições particionadas
Uma exibição particionada é uma exibição definida por uma UNION ALL
das tabelas membros estruturadas da mesma maneira, mas armazenadas separadamente como várias tabelas na mesma instância do SQL Server ou em um grupo de instâncias autônomas de servidores do SQL Server, chamados de servidores de banco de dados federados.
Observação
O método preferencial para o particionamento dos locais de dados para um servidor é através de tabelas particionadas. Para saber mais, confira Partitioned Tables and Indexes.
Quando você cria um esquema de particionamento, deve ficar claro quais dados pertencem a cada partição. Por exemplo, os dados para a tabela Customers
são distribuídos em três tabelas membro, em três locais de servidor: Customers_33
no Server1
, Customers_66
no Server2
e Customers_99
no Server3
.
Uma exibição particionada no Server1
é definida da seguinte maneira:
--Partitioned view as defined on Server1
CREATE VIEW Customers
AS
--Select from local member table.
SELECT *
FROM CompanyData.dbo.Customers_33
UNION ALL
--Select from member table on Server2.
SELECT *
FROM Server2.CompanyData.dbo.Customers_66
UNION ALL
--Select from member table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99;
Em geral, uma exibição é considerada particionada se for da seguinte forma:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn;
Condições para criar exibições particionadas
A
list
de seleçãoNa lista de colunas da definição de exibição, selecione todas as colunas nas tabelas membro.
Assegure que as colunas na mesma posição ordinal de cada
select list
sejam do mesmo tipo, incluindo ordenações. Não é suficiente que as colunas sejam tipos implicitamente conversíveis, como geralmente é o caso deUNION
.Além disso, pelo menos uma coluna (por exemplo,
<col>
) deve aparecer em todas as listas de seleção na mesma posição ordinal. Esse<col>
deve ser definido de uma forma que as tabelas membroT1, ..., Tn
tenham restrições CHECKC1, ..., Cn
definidas em<col>
, respectivamente.A restrição
C1
definida na tabelaT1
deve ser da seguinte forma:C1 ::= < simple_interval > [ OR < simple_interval > OR ...] < simple_interval > :: = < col > { < | > | \<= | >= | = < value >} | < col > BETWEEN < value1 > AND < value2 > | < col > IN ( value_list ) | < col > { > | >= } < value1 > AND < col > { < | <= } < value2 >
As restrições devem ser de uma forma que qualquer valor especificado de
<col>
possa satisfazer, no máximo, uma das restriçõesC1, ..., Cn
para que as restrições não formem um conjunto de intervalos desunidos ou não sobrepostos. A coluna<col>
na qual as restrições desunidas são definidas é chamada de coluna de particionamento. A coluna de particionamento pode ter nomes diferentes nas tabelas subjacentes. As restrições devem estar em um estado habilitado e confiável para que atendam às condições de coluna de particionamento mencionadas anteriormente. Se as restrições estiverem desabilitadas, habilite novamente a verificação de restrição usando a opçãoCHECK CONSTRAINT *constraint_name*
eALTER TABLE
usando a opçãoWITH CHECK
para validá-las.Os exemplos a seguir mostram conjuntos válidos de restrições:
{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
A mesma coluna não pode ser usada várias vezes na lista de seleção.
Coluna de particionamento
A coluna de particionamento faz parte da PRIMARY KEY da tabela.
Ela não pode ser uma coluna computada, de identidade, padrão nem timestamp.
Se houver mais de uma restrição na mesma coluna em uma tabela membro, o Mecanismo de Banco de Dados irá ignorar todas as restrições e não irá considerá-las ao determinar se a exibição é particionada. Para conhecer as condições da exibição particionada, deve haver somente uma restrição de particionamento na coluna de particionamento.
Não há nenhuma restrição na capacidade de atualização da coluna de particionamento.
Tabelas membro ou tabelas subjacentes
T1, ..., Tn
As tabelas podem ser tabelas locais ou tabelas de outros computadores que executam o SQL Server referenciadas através de um nome de quatro partes ou um nome baseado em OPENDATASOURCE ou OPENROWSET. A sintaxe OPENDATASOURCE e OPENROWSET pode especificar um nome de tabela, mas não uma consulta de passagem. Para obter mais informações, confira OPENDATASOURCE (Transact-SQL) e OPENROWSET (Transact-SQL).
Se uma ou mais das tabelas membro forem remotas, a exibição será chamada de exibição particionada distribuída, e as condições adicionais serão aplicadas. Elas são descritas posteriormente nesta seção.
A mesma tabela não pode aparecer duas vezes no conjunto de tabelas que estão sendo combinadas com a instrução
UNION ALL
.As tabelas membro não podem ter índices criados em qualquer coluna computada na tabela.
As tabelas membro têm todas as restrições PRIMARY KEY no mesmo número de colunas.
Todas as tabelas de membro na exibição têm a mesma configuração de preenchimento ANSI. Isso pode ser definido usando a opção de opções de usuário ou
sp_configure
a instrução SET.
Condições para modificar dados em exibições particionadas
As seguintes restrições se aplicam a instruções que modificam dados nas exibições particionadas:
A
INSERT
instrução fornece valores para todas as colunas na exibição, mesmo que as tabelas de membros subjacentes tenham umaDEFAULT
restrição para essas colunas ou se elas permitiremNULL
valores. Para as colunas de tabela membro que têmDEFAULT
definições, as instruções não podem usar explicitamente a palavra-chaveDEFAULT
.O valor que está sendo inserido na coluna de particionamento satisfaz pelo menos uma das restrições subjacentes; caso contrário, a ação de inserção falhará com uma violação de restrição.
UPDATE
as instruções não podem especificar aDEFAULT
palavra-chave como um valor naSET
cláusula, mesmo que a coluna tenha umDEFAULT
valor definido na tabela de membros correspondente.Colunas na exibição que são uma coluna de identidade em uma ou mais tabelas membros não podem ser modificadas usando uma instrução ou
INSERT
uma instruçãoUPDATE
.Se uma das tabelas membro contiver uma coluna de carimbo de data/hora, os dados não poderão ser modificados usando uma instrução ou
INSERT
uma instruçãoUPDATE
.Se uma das tabelas membro contiver um gatilho ou uma restrição
ON UPDATE CASCADE/SET NULL/SET DEFAULT
,ON DELETE CASCADE/SET NULL/SET DEFAULT
a exibição não poderá ser modificada.INSERT
,UPDATE
eDELETE
ações em relação a uma exibição particionada não serão permitidas se houver uma auto-junção com a mesma exibição ou com qualquer uma das tabelas membro na instrução.A importação em massa de dados para uma exibição particionada não tem suporte
bcp
por ou pelasBULK INSERT
instruções.INSERT ... SELECT * FROM OPENROWSET(BULK...)
Entretanto, é possível inserir várias linhas em uma exibição particionada usando uma instrução INSERT.Observação
Para atualizar um modo de exibição particionado, o usuário deve ter
INSERT
UPDATE
, eDELETE
permissões nas tabelas de membro.
Condições adicionais para exibições particionadas distribuídas
Para as exibições particionadas distribuídas (quando uma ou mais tabelas membro são remotas), são aplicáveis as seguintes condições adicionais:
Uma transação distribuída é iniciada para garantir a atomicidade em todos os nós afetados pela atualização.
Defina a opção
XACT_ABORT SET
ON
paraINSERT
,UPDATE
ouDELETE
instruções para funcionar.Qualquer coluna nas tabelas remotas do tipo smallmoney referenciadas em uma exibição particionada são mapeadas como money. Portanto, as colunas correspondentes (na mesma posição ordinal na lista de seleção) nas tabelas locais também devem ser do tipo money.
No nível de compatibilidade de banco de dados 110 e superiores, as colunas em tabelas remotas do tipo smalldatatime referenciadas em uma exibição particionada são mapeadas como smalldatetime. As colunas correspondentes (na mesma posição ordinal na lista de seleção) nas tabelas locais devem ser smalldatetime. Essa é uma alteração no comportamento de versões anteriores do SQL Server nas quais qualquer coluna em tabelas remotas do tipo smalldatetime referenciadas em uma exibição particionada são mapeadas como datetime e as colunas correspondentes em tabelas locais devem ser do tipo datetime. Para obter mais informações, confira Nível de compatibilidade de ALTER DATABASE (Transact-SQL).
Qualquer servidor vinculado na exibição particionada não pode ser um servidor vinculado de loopback. Este é um servidor vinculado que aponta para a mesma instância do SQL Server.
A configuração da opção SET ROWCOUNT
é ignorada para INSERT
, UPDATE
e DELETE
ações que envolvem exibições particionadas atualizáveis e tabelas remotas.
Quando as tabelas membro e a definição de exibição particionada estão em vigor, o otimizador de consulta do SQL Server cria planos inteligentes que usam consultas de forma eficiente para acessar dados de tabelas membro. Com as CHECK
definições de restrição, o processador de consulta mapeia a distribuição de valores de chave entre as tabelas membro. Quando um usuário emite uma consulta, o processador de consulta compara o mapa com os valores especificados na WHERE
cláusula e cria um plano de execução com uma quantidade mínima de transferência de dados entre servidores membros. Portanto, se algumas tabelas de membros estiverem localizadas em servidores remotos, a instância do SQL Server resolverá consultas distribuídas para que a quantidade de dados distribuídos que precisam ser transferidos seja mínima.
Considerações sobre replicação
Para criar exibições particionadas em tabelas membro envolvidas em replicação, as seguintes considerações são aplicáveis:
Se as tabelas subjacentes estiverem envolvidas em replicação de mesclagem ou replicação transacional com assinaturas de atualização, verifique se a coluna uniqueidentifier também está incluída na lista de seleção.
Todas
INSERT
as ações na exibição particionada devem fornecer umNEWID()
valor para a coluna uniqueidentifier . Todas as ações UPDATE na coluna uniqueidentifier devem ser fornecidasNEWID()
como o valor porque a palavra-chave DEFAULT não pode ser usada.A replicação de atualizações feita usando a exibição é a mesma de quando as tabelas são replicadas em dois bancos de dados diferentes: as tabelas são atendidas por agentes de replicação diferentes e a ordem das atualizações não é garantida.
Permissões
Requer a permissão CREATE VIEW no banco de dados e a permissão ALTER no esquema no qual a exibição está sendo criada.
Exemplos
O exemplo a seguir usa o banco de dados AdventureWorks2022
ou AdventureWorksDW2022
.
R. Usar CREATE VIEW para criar um modo de exibição
O exemplo a seguir cria uma exibição usando uma SELECT
instrução. Uma exibição simples é útil quando uma combinação de colunas é consultada com frequência. Os dados dessa exibição vêm das tabelas HumanResources.Employee
e Person.Person
do banco de dados AdventureWorks2022. Os dados fornecem o nome e informações de data de contratação dos funcionários da Ciclos da Adventure Works. A exibição pode ser criada para a pessoa que cuida do controle de aniversários de trabalho, mas sem dar a essa pessoa acesso a todos os dados nessas tabelas.
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. Usar COM CRIPTOGRAFIA
O exemplo a seguir usa a opção WITH ENCRYPTION
e mostra colunas computadas, colunas renomeadas e várias colunas.
Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL.
CREATE VIEW Purchasing.PurchaseOrderReject
WITH ENCRYPTION
AS
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,
RejectedQty / ReceivedQty AS RejectRatio, DueDate
FROM Purchasing.PurchaseOrderDetail
WHERE RejectedQty / ReceivedQty > 0
AND DueDate > CONVERT(DATETIME,'20010630',101) ;
GO
C. OPÇÃO Usar COM VERIFICAÇÃO
O exemplo a seguir mostra uma exibição chamada dbo.SeattleOnly
que referencia cinco tabelas e permite que as modificações de dados se apliquem somente a funcionários que vivem em Seattle.
CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
D. Usar funções internas em um modo de exibição
O exemplo a seguir mostra uma definição de exibição que inclui uma função interna. Ao usar funções, é necessário especificar um nome de coluna para a coluna derivada.
CREATE VIEW Sales.SalesPersonPerform
AS
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)
GROUP BY SalesPersonID;
GO
E. Usar dados particionados
O exemplo a seguir usa as tabelas chamadas SUPPLY1
, SUPPLY2
, SUPPLY3
e SUPPLY4
. Essas tabelas correspondem às tabelas de fornecedores de quatro escritórios, localizados em regiões diferentes.
--Create the tables and insert the values.
CREATE TABLE dbo.SUPPLY1 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY2 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY3 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY4 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),
supplier CHAR(50)
);
GO
--Create the view that combines all supplier tables.
CREATE VIEW dbo.all_supplier_view
WITH SCHEMABINDING
AS
SELECT supplyID, supplier
FROM dbo.SUPPLY1
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY2
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY3
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY4;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)
F. Criar um modo de exibição unindo duas tabelas
O exemplo a seguir cria uma exibição usando uma instrução SELECT
com um OUTER JOIN
. Os resultados da consulta de junção preenchem a exibição.
CREATE VIEW view1
AS
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey,
fis.SalesTerritoryKey, dst.SalesTerritoryRegion
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimSalesTerritory AS dst
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);
Conteúdo relacionado
- ALTERAR TABELA (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- Criar um procedimento armazenado
- sys.dm_sql_referenced_entities (Transact-SQL)
- sys.dm_sql_referencing_entities (Transact-SQL)
- sp_help (Transact-SQL)
- sp_helptext (Transact-SQL)
- sp_refreshview (Transact-SQL)
- sp_rename (Transact-SQL)
- sys.views (Transact-SQL)
- UPDATE (Transact-SQL)
- EVENTDATA (Transact-SQL)