Partilhar via


CRIAR VISTA (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)ponto final de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase 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, um modo de exibição pode ser usado para as seguintes finalidades:

  • Focar, simplificar e personalizar a perceção que cada utilizador tem da base de dados.

  • Como um mecanismo de segurança, permitindo que os usuários acessem dados através da exibição, sem conceder aos usuários permissões 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.

Transact-SQL convenções de sintaxe

Sintaxe

Sintaxe do SQL Server e do 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 o Azure Synapse Analytics e o 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 Microsoft Fabric Data Warehouse e ponto de extremidade de análise 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 o SQL Server 2016 (13.x) SP1).

Condicionalmente altera a vista apenas se ela já existir.

schema_name
É o nome do esquema ao qual a exibição pertence.

view_name
É o nome da vista. Os nomes de exibição devem seguir as regras para identificadores. Especificar o nome do proprietário da exibição é opcional.

coluna
É o nome a ser usado para uma coluna em um modo de 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 devido a uma junção; ou quando uma coluna em um modo de exibição é especificada um nome diferente daquele da coluna da qual ela é derivada. Nomes de colunas também podem ser atribuídos na SELECT instrução.

Se 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 da exibição, as permissões para um nome de coluna se aplicam a uma CREATE VIEW instrução ou ALTER VIEW , independentemente da fonte dos dados subjacentes. Por exemplo, se forem SalesOrderID concedidas permissões na coluna em uma instrução CREATE VIEW, uma ALTER VIEW instrução poderá nomear a SalesOrderID coluna com um nome de coluna diferente, como OrderRef, e ainda ter as permissões associadas à exibição usando SalesOrderID.

COMO

Especifica as ações que o modo de 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 outros modos de exibição. As permissões apropriadas são necessárias para selecionar entre os objetos referenciados na SELECT cláusula do modo de exibição criado.

Um modo de exibição não precisa ser um subconjunto das linhas e colunas de uma tabela específica. Pode ser criado um modo de exibição 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 instrução de tabela única ou uma multitabela 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 também haja uma TOP cláusula na lista selecionada 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 a uma tabela temporária ou a 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, consulte FROM (Transact-SQL) e SELECT (Transact-SQL).

Funções e instruções múltiplas SELECT separadas por UNION ou UNION ALL podem ser usadas em select_statement.

OPÇÃO DE SELEÇÃO

Força todas as instruções de modificação de dados executadas em relação à exibição a seguir os critérios definidos em select_statement. Quando uma linha é modificada por meio de um modo de exibição, o WITH CHECK OPTION garante que os dados permaneçam visíveis através do modo de exibição depois que a modificação for confirmada.

Observação

O CHECK OPTION só se aplica a atualizações feitas através da vista. Ele não tem aplicabilidade a quaisquer atualizações realizadas 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 o modo de exibição seja publicado como parte da replicação do SQL Server.

SCHEMABINDING

Vincula o modo de exibição ao esquema da(s) tabela(s) subjacente(s). Quando SCHEMABINDING é especificado, a tabela ou tabelas base não podem ser modificadas de uma forma que afete a definição de exibição. A própria definição de exibição deve primeiro ser modificada ou descartada para remover dependências na tabela a ser modificada. Quando você usa SCHEMABINDINGo , o select_statement deve incluir os nomes de duas partes (esquema.objeto) 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.

Modos de exibição ou tabelas que participam de um modo de exibição criado com a cláusula SCHEMABINDING não podem ser descartados, a menos que esse modo de exibição seja descartado ou alterado para que não tenha mais vinculação de esquema. Caso contrário, o Mecanismo de Banco de Dados gerará um erro. Além disso, a execução de ALTER TABLE instruções em tabelas que participam de modos de exibição que têm vinculaçã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 o modo de exibição, em vez da tabela ou tabelas base, quando os metadados do modo de navegação estiverem sendo solicitados para uma consulta que faça referência ao modo de exibição. Os metadados do modo de navegação são metadados adicionais que a instância do SQL Server retorna a 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 navegação incluem informações sobre a tabela base à qual pertencem as colunas do conjunto de resultados.

Para modos de exibição criados com VIEW_METADATAo , os metadados do modo de navegação retornam o nome do modo de exibição e não os nomes da tabela base quando descrevem colunas do modo de exibição no conjunto de resultados.

Quando um modo de exibição é criado usando WITH VIEW_METADATAo , todas as suas colunas, exceto uma coluna de carimbo de data/hora , são atualizáveis se o modo de exibição tiver INSTEAD OF INSERT ou INSTEAD OF UPDATE for acionado. Para obter mais informações sobre modos de exibição atualizáveis, consulte Observações.

Observações

Uma exibição só pode ser criada no banco de dados atual. A CREATE VIEW deve ser a primeira instrução em um lote de consulta. Uma vista pode ter um máximo de 1.024 colunas.

Ao consultar por meio de uma exibição, o Mecanismo de Banco de Dados verifica se todos os objetos de banco de dados referenciados em qualquer lugar da instrução existem e 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 bem-sucedida traduz a ação em uma ação em relação à tabela ou tabelas subjacentes.

Se um modo de exibição depender de uma tabela ou exibição que foi descartada, o Mecanismo de Banco de Dados produzirá uma mensagem de erro quando alguém tentar usar o modo de exibição. Se uma nova tabela ou exibição for criada e a estrutura da tabela não for alterada da tabela base anterior para substituir a descartada, a exibição se tornará novamente utilizável. Se a nova tabela ou estrutura de exibição for alterada, a exibição deverá ser descartada e recriada.

Se um modo de exibição não for criado com a SCHEMABINDING cláusula, execute sp_refreshview quando forem feitas alterações nos objetos subjacentes ao modo de exibição que afetam a definição do modo de exibição. Caso contrário, o modo de exibição pode produzir resultados inesperados quando é consultado.

Quando um modo de exibição é criado, as informações sobre o modo de exibição são armazenadas nas seguintes exibições de 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 do sys.sql_modules .

Uma consulta que usa um índice em um modo de exibição definido com expressões numéricas ou flutuantes pode ter um resultado diferente de uma consulta semelhante que não usa o índice no modo de 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 e SET QUOTED_IDENTIFIER quando um modo de SET ANSI_NULLS exibição é criado. Essas configurações originais são usadas para analisar o modo de exibição quando ele é usado. Portanto, quaisquer configurações de sessão de 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 oferecem suporte à associação de esquema. Portanto, se forem feitas alterações nos objetos subjacentes, você deve soltar e recriar a exibição para atualizar os metadados subjacentes. Para obter mais informações, consulte Exibições T-SQL com pool SQL dedicado e pool SQL sem servidor no Azure Synapse Analytics.

No Azure Synapse Analytics, não há suporte para modos de exibição atualizáveis, gatilhos DML (de qualquer tipo AFTER ou INSTEAD OF) e modos de exibição particionados. Para obter mais informações, consulte Exibições T-SQL com pool SQL dedicado e pool SQL sem servidor no Azure Synapse Analytics.

No Azure Synapse Analytics, não há suporte para modos de exibição particionados. Para obter mais informações, consulte Exibições T-SQL com pool SQL dedicado e pool SQL sem servidor no Azure Synapse Analytics.

No banco de dados SQL da malha, 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 do banco de dados SQL de malha.

Vistas atualizáveis

Você pode modificar os dados de uma tabela base subjacente por meio de uma exibição, desde que as seguintes condições sejam verdadeiras:

  • Quaisquer modificações, incluindo UPDATE, INSERTe DELETE instruções, devem fazer referência a colunas de apenas uma tabela base.

  • As colunas que estão sendo modificadas no modo de exibição devem fazer referência direta aos dados subjacentes nas colunas da tabela. As colunas não podem ser derivadas de qualquer outra forma, como através do seguinte:

    • Uma função agregada: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, , STDEVPVAR, e VARP.

    • Um cálculo. A coluna não pode ser calculada a partir de uma expressão que usa outras colunas. As colunas que são formadas usando os operadores set UNION, UNION ALL, CROSSJOIN, EXCEPT, e INTERSECT equivalem a um cálculo e também não são atualizáveis.

  • As colunas que estão sendo modificadas não são afetadas por GROUP BY, HAVINGou DISTINCT cláusulas.

  • TOP não é usado em nenhum lugar no select_statement da exibição junto com a WITH CHECK OPTION cláusula.

As restrições anteriores aplicam-se a quaisquer subconsultas na cláusula FROM da vista, tal como se aplicam à vista em si. Geralmente, o Mecanismo de Banco de Dados deve ser capaz de rastrear inequivocamente modificações da definição de exibição para uma tabela base. Para obter mais informações, consulte Modificar dados por meio de um modo de exibição.

Se as restrições anteriores impedirem que você modifique os dados diretamente por meio de uma exibição, considere as seguintes opções:

  • EM VEZ DE GATILHOS

    INSTEAD OF Gatilhos podem ser criados em um modo de exibição para tornar um modo de 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 permite que o usuário especifique o conjunto de ações que devem acontecer para processar a instrução de modificação de dados. Portanto, se existir um INSTEAD OF gatilho para uma exibição em uma instrução de modificação de dados específica (INSERT, UPDATE, ou DELETE), a exibição correspondente será atualizável por meio dessa instrução. Para obter mais informações sobre INSTEAD OF gatilhos, consulte Gatilhos DML.

  • Vistas particionadas

    Se o modo de exibição for um modo de exibição particionado, ele será atualizável, sujeito a certas restrições. Quando necessário, o Mecanismo de Banco de Dados distingue modos de exibição particionados locais como os modos de exibição em que todas as tabelas participantes e o modo de exibição estão na mesma instância do SQL Server, e modos de exibição particionados distribuídos como os modos de exibição nos quais pelo menos uma das tabelas no modo de exibição reside em um servidor diferente ou remoto.

Vistas particionadas

Um modo de exibição particionado é um modo de exibição definido 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 SQL Server, chamados servidores de banco de dados federados.

Observação

O método preferido para particionar dados locais para um servidor é através de tabelas particionadas. Para obter mais informações, consulte Tabelas Particionadas e Índices.

Quando você projeta um esquema de particionamento, deve ficar claro quais dados pertencem a cada partição. Por exemplo, os dados da Customers tabela são distribuídos em três tabelas de membros em três locais de servidor: Customers_33 on Server1, Customers_66 on Server2e Customers_99 on Server3.

Uma vista particionada em Server1 é definida da seguinte forma:

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

Geralmente, diz-se que uma vista é uma vista particionada se tiver a 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 vistas particionadas

  1. A seleção list

    • Na lista de colunas da definição de exibição, selecione todas as colunas nas tabelas de membros.

    • Certifique-se de que as colunas na mesma posição ordinal de cada uma select list são do mesmo tipo, incluindo agrupamentos. 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. Defina <col> de forma que as tabelas T1, ..., Tn de membros tenham restrições C1, ..., Cn CHECK definidas em <col>, respectivamente.

      A restrição C1 definida na tabela T1 deve ter a 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 tal forma que qualquer valor especificado de <col> possa satisfazer, no máximo, uma das restrições C1, ..., Cn , de modo que as restrições formem um conjunto de intervalos separados ou não sobrepostos. A coluna <col> na qual as restrições separadas 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 mencionadas anteriormente da coluna de particionamento. Se as restrições estiverem desabilitadas, reative a verificação de restrições usando a CHECK CONSTRAINT *constraint_name* opção de ALTER TABLE, e usando a WITH CHECK opção 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 CHAVE PRIMÁRIA da tabela.

    • Não pode ser uma coluna computada, de identidade, padrão ou de carimbo de data/hora .

    • Se houver mais de uma restrição na mesma coluna em uma tabela membro, o Mecanismo de Banco de Dados ignorará todas as restrições e não as considerará ao determinar se a exibição é uma exibição particionada. Para atender às condições do modo de exibição particionado, verifique se há apenas uma restrição de particionamento na coluna de particionamento.

    • Não há restrições sobre a capacidade de atualização da coluna de particionamento.

  3. Tabelas de membros ou tabelas subjacentes T1, ..., Tn

    • As tabelas podem ser tabelas locais ou tabelas de outros computadores que executam o SQL Server que são referenciadas por meio 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, consulte OPENDATASOURCE (Transact-SQL) e OPENROWSET (Transact-SQL).

      Se uma ou mais das tabelas de membros forem remotas, a exibição será chamada de exibição particionada distribuída e condições adicionais serão aplicadas. Eles são descritos mais adiante nesta seção.

    • A mesma tabela não pode aparecer duas vezes no conjunto de tabelas que estão sendo combinadas com a UNION ALL instrução.

    • As tabelas de membros não podem ter índices criados em colunas computadas na tabela.

    • As tabelas de membros têm todas as restrições de CHAVE PRIMÁRIA no mesmo número de colunas.

    • Todas as tabelas de membros na exibição têm a mesma configuração de preenchimento ANSI. Isso pode ser definido usando a opção de opções do usuário ou sp_configure a instrução SET.

Condições para modificar dados em modos de exibição particionados

As restrições a seguir se aplicam a instruções que modificam dados em modos de exibição particionados:

  • 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 permitirem NULL valores. Para as colunas da tabela de membros 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 Inserir 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.

  • As colunas no modo de exibição que são uma coluna de identidade em uma ou mais das tabelas de membros não podem ser modificadas usando uma INSERT instrução or UPDATE .

  • Se uma das tabelas de membros contiver uma coluna de carimbo de data/hora , os dados não poderão ser modificados usando uma INSERT instrução or UPDATE .

  • Se uma das tabelas de membros contiver um gatilho ou uma ON UPDATE CASCADE/SET NULL/SET DEFAULT restrição ou ON DELETE CASCADE/SET NULL/SET DEFAULT , a exibição não poderá ser modificada.

  • INSERT, UPDATEe DELETE ações contra um modo de exibição particionado não são permitidas se houver uma associação automática com o mesmo modo de exibição ou com qualquer uma das tabelas de membros na instrução.

  • A importação em massa de dados para uma exibição particionada não é suportada pelas bcp instruções ou BULK INSERT eINSERT ... SELECT * FROM OPENROWSET(BULK...). No entanto, você pode inserir várias linhas em um modo de exibição particionado usando a instrução INSERT .

    Observação

    Para atualizar um modo de exibição particionado, o usuário deve ter INSERT, UPDATEe DELETE permissões nas tabelas de membros.

Condições adicionais para vistas particionadas distribuídas

Para exibições particionadas distribuídas (quando uma ou mais tabelas de membros são remotas), as seguintes condições adicionais se aplicam:

  • Uma transação distribuída é iniciada para garantir a atomicidade em todos os nós afetados pela atualização.

  • Defina a XACT_ABORT SET opção como ON para INSERT, UPDATEou DELETE instruções para funcionar.

  • Todas as colunas em tabelas remotas do tipo smallmoney que são referenciadas em uma exibição particionada são mapeadas como dinheiro. Portanto, as colunas correspondentes (na mesma posição ordinal na lista de seleção) nas tabelas locais também devem ser do tipo dinheiro.

  • No nível de compatibilidade de banco de dados 110 e superior, todas as colunas em tabelas remotas do tipo smalldatetime referenciadas em um modo de exibição particionado 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 todas as colunas em tabelas remotas do tipo smalldatetime referenciadas em um modo de exibição particionado são mapeadas como datetime e as colunas correspondentes em tabelas locais devem ser do tipo datetime. Para obter mais informações, consulte ALTER DATABASE Compatibility Level (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 é ignorada SET ROWCOUNT para INSERT, UPDATEe DELETE ações que envolvem exibições particionadas atualizáveis e tabelas remotas.

Quando as tabelas de membros 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 de membros. Com as CHECK definições de restrição, o processador de consultas mapeia a distribuição de valores-chave entre as tabelas de membros. Quando um usuário emite uma consulta, o processador de consultas 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 de membros envolvidas na replicação, aplicam-se as seguintes considerações:

  • Se as tabelas subjacentes estiverem envolvidas na replicação de mesclagem ou na replicação transacional com a atualização de assinaturas, verifique se a coluna uniqueidentifier também está incluída na lista de seleção.

    Quaisquer INSERT ações no modo de exibição particionado devem fornecer um NEWID() valor para a coluna uniqueidentifier . Qualquer ação UPDATE em relação à coluna uniqueidentifier deve ser fornecida NEWID() como o valor porque a palavra-chave DEFAULT não pode ser usada.

  • A replicação de atualizações feitas usando o modo de exibição é a mesma que quando as tabelas são replicadas em dois bancos de dados diferentes: as tabelas são servidas 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

Os exemplos a seguir usam o AdventureWorks2022 banco de dados ou AdventureWorksDW2022 .

Um. Use CREATE VIEW para criar um modo de exibição

O exemplo a seguir cria um modo de exibição usando uma SELECT instrução. Uma vista simples é útil quando uma combinação de colunas é consultada com frequência. Os dados dessa exibição vêm das HumanResources.Employee tabelas e Person.Person do banco de dados AdventureWorks2022. Os dados fornecem informações de nome e data de contratação para os funcionários da Adventure Works Cycles. A visualização poderia ser criada para a pessoa responsável pelo acompanhamento 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. Use COM CRIPTOGRAFIA

O exemplo a seguir usa a WITH ENCRYPTION opção 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. Use a opção WITH CHECK

O exemplo a seguir mostra um modo de exibição chamado dbo.SeattleOnly que faz referência a cinco tabelas e permite que as modificações de dados se apliquem apenas aos funcionários que moram 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. Utilizar funções incorporadas numa vista

O exemplo a seguir mostra uma definição de exibição que inclui uma função interna. Ao usar funções, você deve 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 tabelas denominadas SUPPLY1, SUPPLY2, SUPPLY3e SUPPLY4. Estas tabelas correspondem às tabelas de fornecedores de quatro escritórios, localizados em diferentes regiões.

--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 and Analytics Platform System (PDW)

F. Criar uma vista juntando duas tabelas

O exemplo a seguir cria um modo de exibição usando uma SELECT instrução com um OUTER JOINarquivo . Os resultados da consulta de associaçã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);