Compartilhar via


CREATE VIEW (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise de SQL no Microsoft FabricWarehouse no Microsoft FabricBanco 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 uma TOP cláusula na lista de seleção da SELECT instrução

    Importante

    A ORDER BY cláusula é usada apenas para determinar as linhas que são retornadas pela TOP cláusula ou OFFSET na definição de exibição. A ORDER BY cláusula não garante resultados ordenados quando a exibição é consultada, a menos que ORDER BY também seja especificada na própria consulta.

  • A palavra-chave INTO

  • A OPTION cláusula

  • Uma 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, DELETEou 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, INSERTe DELETE 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, VARe VARP.

    • 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 BYHAVINGcláusulas ou DISTINCT 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. O INSTEAD 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 um INSTEAD OF gatilho para uma exibição em uma instrução de modificação de dados específica (INSERTouUPDATEDELETE), a exibição correspondente será atualizável por meio dessa instrução. Para obter mais informações sobre INSTEAD 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

  1. A list de seleção

    • Na 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 de UNION.

      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 membro T1, ..., Tn tenham restrições CHECK C1, ..., Cn definidas em <col>, respectivamente.

      A restrição C1 definida na tabela T1 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ções C1, ..., 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ção CHECK CONSTRAINT *constraint_name* e ALTER TABLEusando a opção WITH 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.

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

  3. 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 uma DEFAULT restrição para essas colunas ou se elas permitirem NULL valores. Para as colunas de tabela membro que têm DEFAULT definições, as instruções não podem usar explicitamente a palavra-chave DEFAULT.

  • 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 a DEFAULT palavra-chave como um valor na SET cláusula, mesmo que a coluna tenha um DEFAULT 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, UPDATEe DELETE 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 pelas BULK 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 INSERTUPDATE, e DELETE 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 SETON para INSERT, UPDATEou DELETE 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, UPDATEe 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 um NEWID() valor para a coluna uniqueidentifier . Todas as ações UPDATE na coluna uniqueidentifier devem ser fornecidas NEWID() 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);