CREATE VIEW (Transact-SQL)CREATE VIEW (Transact-SQL)

APLICA-SE A: simSQL Server (a partir do 2008) simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Cria uma tabela virtual cujo conteúdo (colunas e linhas) é definido por uma consulta.Creates a virtual table whose contents (columns and rows) are defined by a query. Use esta instrução para criar uma exibição dos dados em uma ou mais tabelas no banco de dados.Use this statement to create a view of the data in one or more tables in the database. Por exemplo, uma exibição pode ser usada para as finalidades a seguir:For example, a view can be used for the following purposes:

  • Para focalizar, simplificar e personalizar a percepção que cada usuário tem do banco de dados.To focus, simplify, and customize the perception each user has of the database.

  • 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.As a security mechanism by allowing users to access data through the view, without granting the users permissions to directly access the underlying base tables.

  • Para fornecer uma interface compatível com versões anteriores para emular uma tabela cujo esquema foi alterado.To provide a backward compatible interface to emulate a table whose schema has changed.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
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 ]       
}   
-- Syntax for Azure SQL Data Warehouse and 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>  

ArgumentosArguments

OR ALTEROR ALTER
Aplica-se a: Banco de dados SQL do AzureAzure SQL Database e SQL ServerSQL Server (começando com SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1).Applies to: Banco de dados SQL do AzureAzure SQL Database and SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1).

Altera condicionalmente a exibição somente se ela já existe.Conditionally alters the view only if it already exists.

schema_nameschema_name
É o nome do esquema ao qual a exibição pertence.Is the name of the schema to which the view belongs.

view_nameview_name
É o nome da exibição.Is the name of the view. Os nomes de exibição devem seguir as regras para identificadores.View names must follow the rules for identifiers. A especificação do nome do proprietário da exibição é opcional.Specifying the view owner name is optional.

columncolumn
É o nome a ser usado para uma coluna em uma exibição.Is the name to be used for a column in a view. O nome de coluna é necessário somente quando uma coluna é derivada de uma expressão aritmética, função ou constante, quando duas ou mais colunas puderem ter o mesmo nome, normalmente por causa de uma união, ou quando uma coluna em uma exibição tiver um nome especificado diferente daquele da coluna da qual ela é derivada.A column name is required only when a column is derived from an arithmetic expression, a function, or a constant; when two or more columns may otherwise have the same name, typically because of a join; or when a column in a view is specified a name different from that of the column from which it is derived. Nomes de coluna também podem ser atribuídos na instrução SELECT.Column names can also be assigned in the SELECT statement.

Se column não for especificado, as colunas de exibição adquirirão os mesmos nomes que as colunas na instrução SELECT.If column is not specified, the view columns acquire the same names as the columns in the SELECT statement.

Observação

Nas colunas da exibição, as permissões de um nome de coluna são aplicadas por uma instrução CREATE VIEW ou ALTER VIEW, independentemente da fonte dos dados subjacentes.In the columns for the view, the permissions for a column name apply across a CREATE VIEW or ALTER VIEW statement, regardless of the source of the underlying data. Por exemplo, se forem concedidas permissões na coluna SalesOrderID em uma instrução CREATE VIEW, uma instrução ALTER VIEW poderá nomear a coluna SalesOrderID com um nome de coluna diferente, como OrderRef, e ainda terá as permissões associadas à exibição usando SalesOrderID.For example, if permissions are granted on the SalesOrderID column in a CREATE VIEW statement, an ALTER VIEW statement can name the SalesOrderID column with a different column name, such as OrderRef, and still have the permissions associated with the view using SalesOrderID.

ASAS
Especifica as ações que a exibição deve executar.Specifies the actions the view is to perform.

select_statementselect_statement
É a instrução SELECT que define a exibição.Is the SELECT statement that defines the view. A instrução pode usar mais de uma tabela e outras exibições.The statement can use more than one table and other views. Permissões apropriadas são necessárias para selecionar os objetos referenciados na cláusula SELECT da exibição criada.Appropriate permissions are required to select from the objects referenced in the SELECT clause of the view that is created.

Uma exibição não tem que ser um subconjunto simples das linhas e colunas de uma determinada tabela.A view does not have to be a simple subset of the rows and columns of one particular table. Uma exibição pode ser criada usando mais de uma tabela ou outras exibições com uma cláusula VIEW de qualquer complexidade.A view can be created that uses more than one table or other views with a SELECT clause of any complexity.

Em uma definição de exibição indexada, a instrução SELECT deve ser uma instrução de tabela simples ou uma JOIN de várias tabelas com agregação opcional.In an indexed view definition, the SELECT statement must be a single table statement or a multitable JOIN with optional aggregation.

As cláusulas SELECT em uma definição de exibição não podem incluir o seguinte:The SELECT clauses in a view definition cannot include the following:

  • Uma cláusula ORDER BY, a não ser que exista também uma cláusula TOP na lista de seleção da instrução SELECTAn ORDER BY clause, unless there is also a TOP clause in the select list of the SELECT statement

    Importante

    A cláusula ORDER BY é usada apenas para determinar as linhas retornadas pela cláusula TOP ou OFFSET na definição da exibição.The ORDER BY clause is used only to determine the rows that are returned by the TOP or OFFSET clause in the view definition. A cláusula ORDER BY não garante resultados ordenados quando a exibição é consultada, a menos que ORDER BY também seja especificada na consulta em si.The ORDER BY clause does not guarantee ordered results when the view is queried, unless ORDER BY is also specified in the query itself.

  • A palavra-chave INTOThe INTO keyword

  • A cláusula OPTIONThe OPTION clause

  • Uma referência para uma tabela temporária ou uma variável de tabela.A reference to a temporary table or a table variable.

Como select_statement usa a instrução SELECT, é válido usar as dicas <join_hint> e <table_hint> conforme especificado na cláusula FROM.Because select_statement uses the SELECT statement, it is valid to use <join_hint> and <table_hint> hints as specified in the FROM clause. Para obter mais informações, veja FROM (Transact-SQL) e SELECT (Transact-SQL).For more information, see FROM (Transact-SQL) and SELECT (Transact-SQL).

Funções e várias instruções SELECT separadas por UNION ou UNION ALL podem ser usadas em select_statement.Functions and multiple SELECT statements separated by UNION or UNION ALL can be used in select_statement.

CHECK OPTIONCHECK OPTION
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.Forces all data modification statements executed against the view to follow the criteria set within select_statement. Quando uma linha é modificada através de uma exibição, WITH CHECK OPTION verifica se os dados permanecem visíveis na exibição depois que a modificação é confirmada.When a row is modified through a view, the WITH CHECK OPTION makes sure the data remains visible through the view after the modification is committed.

Observação

Qualquer atualização executada diretamente em tabelas subjacentes de uma exibição não são verificadas na exibição, mesmo que CHECK OPTION seja especificada.Any updates performed directly to a view's underlying tables are not verified against the view, even if CHECK OPTION is specified.

ENCRYPTIONENCRYPTION
Aplica-se a: SQL Server 2008SQL Server 2008 a SQL Server 2017SQL Server 2017 e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Banco de dados SQL do AzureAzure SQL Database.

Criptografa as entradas em sys.syscomments que contêm o texto da instrução CREATE VIEW.Encrypts the entries in sys.syscomments that contain the text of the CREATE VIEW statement. Usar WITH ENCRYPTION impede que a exibição seja publicada como parte da Replicação do SQL Server.Using WITH ENCRYPTION prevents the view from being published as part of SQL Server replication.

SCHEMABINDINGSCHEMABINDING
Associa a exibição ao esquema da tabela ou tabelas subjacentes.Binds the view to the schema of the underlying table or tables. Quando SCHEMABINDING for especificado, a tabela ou tabelas base não poderão ser modificadas de um modo que possam afetar a definição da exibição.When SCHEMABINDING is specified, the base table or tables cannot be modified in a way that would affect the view definition. A própria definição da exibição, primeiro, deve ser modificada ou descartada para remover as dependências na tabela a ser modificada.The view definition itself must first be modified or dropped to remove dependencies on the table that is to be modified. Quando você usa SCHEMABINDING, 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.When you use SCHEMABINDING, the select_statement must include the two-part names (schema.object) of tables, views, or user-defined functions that are referenced. Todos os objetos referenciados devem estar no mesmo banco de dados.All referenced objects must be in the same database.

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.Views or tables that participate in a view created with the SCHEMABINDING clause cannot be dropped unless that view is dropped or changed so that it no longer has schema binding. Caso contrário, o Mecanismo de Banco de DadosDatabase Engine gera um erro.Otherwise, the Mecanismo de Banco de DadosDatabase Engine raises an error. Além disso, haverá falha na execução de instruções ALTER TABLE nas tabelas que participam de exibições com associação de esquema quando essas instruções afetarem a definição da exibição.Also, executing ALTER TABLE statements on tables that participate in views that have schema binding fail when these statements affect the view definition.

VIEW_METADATAVIEW_METADATA
Especifica que a instância do SQL ServerSQL 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.Specifies that the instance of SQL ServerSQL Server will return to the DB-Library, ODBC, and OLE DB APIs the metadata information about the view, instead of the base table or tables, when browse-mode metadata is being requested for a query that references the view. Metadados do modo de procura são metadados adicionais que a instância do SQL ServerSQL Server retorna para essas APIs do lado do cliente.Browse-mode metadata is additional metadata that the instance of SQL ServerSQL Server returns to these client-side APIs. Esses metadados permitem que as APIs do lado do cliente implementem cursores atualizáveis do lado do cliente.This metadata enables the client-side APIs to implement updatable client-side cursors. Os metadados do modo de procura incluem informações sobre a tabela base às quais as colunas do conjunto de resultados pertencem.Browse-mode metadata includes information about the base table that the columns in the result set belong to.

Para exibições criadas com VIEW_METADATA, os metadados do modo de procura retornam o nome da exibição e não os nomes de tabela base quando descreverem colunas da exibição no conjunto de resultados.For views created with VIEW_METADATA, the browse-mode metadata returns the view name and not the base table names when it describes columns from the view in the result set.

Quando uma exibição é criada usando WITH VIEW_METADATA, todas as suas colunas, com exceção de uma coluna timestamp, serão atualizáveis se a exibição tiver gatilhos INSTEAD OF INSERT ou INSTEAD OF UPDATE.When a view is created by using WITH VIEW_METADATA, all its columns, except a timestamp column, are updatable if the view has INSTEAD OF INSERT or INSTEAD OF UPDATE triggers. Para obter mais informações sobre exibições atualizáveis, consulte Comentários.For more information about updatable views, see Remarks.

RemarksRemarks

A exibição só pode ser criada no banco de dados atual.A view can be created only in the current database. O CREATE VIEW deve ser a primeira instrução em um lote de consulta.The CREATE VIEW must be the first statement in a query batch. Uma exibição pode ter, no máximo, 1.024 partições.A view can have a maximum of 1,024 columns.

Ao fazer uma consulta através de uma exibição, o Mecanismo de Banco de DadosDatabase Engine 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.When querying through a view, the Mecanismo de Banco de DadosDatabase Engine checks to make sure that all the database objects referenced anywhere in the statement exist and that they are valid in the context of the statement, and that data modification statements do not violate any data integrity rules. Uma verificação que falha retorna uma mensagem de erro.A check that fails returns an error message. Uma verificação com êxito traduz a ação em uma ação na tabela ou tabelas subjacentes.A successful check translates the action into an action against the underlying table or tables.

Se uma exibição depender de uma tabela ou exibição descartada, o Mecanismo de Banco de DadosDatabase Engine produzirá uma mensagem de erro quando alguém tentar usá-la.If a view depends on a table or view that was dropped, the Mecanismo de Banco de DadosDatabase Engine produces an error message when anyone tries to use the view. 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.If a new table or view is created and the table structure does not change from the previous base table to replace the one dropped, the view again becomes usable. Se a nova tabela ou estrutura de exibição for alterada, a exibição deverá ser descartada e recriada.If the new table or view structure changes, the view must be dropped and re-created.

Se uma exibição não for criada com a cláusula SCHEMABINDING, sp_refreshview deverá ser executado quando forem feitas alterações aos objetos subjacentes à exibição que afetam a definição desta.If a view is not created with the SCHEMABINDING clause, sp_refreshview should be run when changes are made to the objects underlying the view that affect the definition of the view. Caso contrário, a exibição poderá gerar resultados inesperados quando consultada.Otherwise, the view might produce unexpected results when it is queried.

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.When a view is created, information about the view is stored in the following catalog views: sys.views, sys.columns, and sys.sql_expression_dependencies. O texto da instrução CREATE VIEW é armazenado na exibição do catálogo sys.sql_modules.The text of the CREATE VIEW statement is stored in the sys.sql_modules catalog view.

Uma consulta que usa um índice em uma exibição definida com expressões numeric ou float pode ter um resultado diferente de uma consulta semelhante que não usa o índice ou a exibição.A query that uses an index on a view defined with numeric or float expressions may have a result that is different from a similar query that does not use the index on the view. Essa diferença pode ser causada por erros de arredondamento durante as ações INSERT, DELETE ou UPDATE em tabelas subjacentes.This difference may be caused by rounding errors during INSERT, DELETE, or UPDATE actions on underlying tables.

O Mecanismo de Banco de DadosDatabase Engine salva as configurações de QUOTED_IDENTIFIER Fixo e ANSI_NULLS quando uma exibição é criada.The Mecanismo de Banco de DadosDatabase Engine saves the settings of SET QUOTED_IDENTIFIER and SET ANSI_NULLS when a view is created. Essas configurações originais são usadas para analisar a exibição quando a ela é usada.These original settings are used to parse the view when the view is used. Portanto, qualquer configuração de sessão de cliente para SET QUOTED_IDENTIFIER e SET ANSI_NULLS não afeta a definição da exibição quando a exibição é acessada.Therefore, any client-session settings for SET QUOTED_IDENTIFIER and SET ANSI_NULLS do not affect the view definition when the view is accessed.

Exibições atualizáveisUpdatable Views

É possível modificar os dados de uma tabela base subjacente através de uma exibição, contanto que as seguintes condições sejam verdadeiras:You can modify the data of an underlying base table through a view, as long as the following conditions are true:

  • Todas as modificações, inclusive as instruções UPDATE, INSERT e DELETE, devem referenciar colunas de apenas uma tabela base.Any modifications, including UPDATE, INSERT, and DELETE statements, must reference columns from only one base table.

  • As colunas a serem modificadas na exibição devem referenciar diretamente os dados subjacentes das colunas da tabela.The columns being modified in the view must directly reference the underlying data in the table columns. As colunas não podem ser derivadas de qualquer outro modo, como pelo seguinte:The columns cannot be derived in any other way, such as through the following:

    • Uma função de agregação: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR e VARP.An aggregate function: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, and VARP.

    • Uma computação.A computation. A coluna não pode ser computada de uma expressão que utiliza outras colunas.The column cannot be computed from an expression that uses other columns. 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.Columns that are formed by using the set operators UNION, UNION ALL, CROSSJOIN, EXCEPT, and INTERSECT amount to a computation and are also not updatable.

  • As colunas modificadas não são afetadas pelas cláusulas GROUP BY, HAVING ou DISTINCT.The columns being modified are not affected by GROUP BY, HAVING, or DISTINCT clauses.

  • TOP não é usado em nenhum lugar na select_statement da exibição junto com a cláusula WITH CHECK OPTION.TOP is not used anywhere in the select_statement of the view together with the WITH CHECK OPTION clause.

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.The previous restrictions apply to any subqueries in the FROM clause of the view, just as they apply to the view itself. Em geral, o Mecanismo de Banco de DadosDatabase Engine deve ser capaz de rastrear sem ambiguidade as modificações da definição da exibição em uma tabela base.Generally, the Mecanismo de Banco de DadosDatabase Engine must be able to unambiguously trace modifications from the view definition to one base table. Para obter mais informações, confira Modificar dados por meio de uma exibição.For more information, see Modify Data Through a View.

Se as restrições anteriores impediram a modificação de dados direta através de uma exibição, considere as seguintes opções:If the previous restrictions prevent you from modifying data directly through a view, consider the following options:

  • Gatilhos INSTEAD OFINSTEAD OF Triggers

    Os gatilhos INSTEAD OF podem ser criados em uma exibição para torná-la atualizável.INSTEAD OF triggers can be created on a view to make a view updatable. O gatilho INSTEAD OF é executado em vez da instrução de modificação de dados na qual ele é definido.The INSTEAD OF trigger is executed instead of the data modification statement on which the trigger is defined. 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.This trigger lets the user specify the set of actions that must happen to process the data modification statement. Portanto, se um gatilho INSTEAD OF existir 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 através dessa instrução.Therefore, if an INSTEAD OF trigger exists for a view on a specific data modification statement (INSERT, UPDATE, or DELETE), the corresponding view is updatable through that statement. Para obter mais informações sobre gatilhos INSTEAD OF, veja Gatilhos DML.For more information about INSTEAD OF triggers, see DML Triggers.

  • Exibições particionadasPartitioned Views

    Se a exibição for uma exibição particionada, ela será atualizável, sujeita a determinadas restrições.If the view is a partitioned view, the view is updatable, subject to certain restrictions. Quando necessário, o Mecanismo de Banco de DadosDatabase Engine 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 ServerSQL 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.When it is needed, the Mecanismo de Banco de DadosDatabase Engine distinguishes local partitioned views as the views in which all participating tables and the view are on the same instance of SQL ServerSQL Server, and distributed partitioned views as the views in which at least one of the tables in the view resides on a different or remote server.

Exibições particionadasPartitioned Views

Uma exibição particionada é uma exibição definida por uma UNION ALL das tabelas de membro estruturadas da mesma maneira, mas armazenadas separadamente como tabelas múltiplas na mesma instância do SQL ServerSQL Server ou em um grupo de instâncias autônomas de servidores SQL ServerSQL Server, chamados de servidores de banco de dados federados.A partitioned view is a view defined by a UNION ALL of member tables structured in the same way, but stored separately as multiple tables in either the same instance of SQL ServerSQL Server or in a group of autonomous instances of SQL ServerSQL Server servers, called federated database servers.

Observação

O método preferencial para o particionamento dos locais de dados para um servidor é através de tabelas particionadas.The preferred method for partitioning data local to one server is through partitioned tables. Para saber mais, confira Partitioned Tables and Indexes.For more information, see Partitioned Tables and Indexes.

Ao criar um esquema de particionamento, devem estar claro quais dados pertencem a cada partição.In designing a partitioning scheme, it must be clear what data belongs to each partition. 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.For example, the data for the Customers table is distributed in three member tables in three server locations: Customers_33 on Server1, Customers_66 on Server2, and Customers_99 on Server3.

Uma exibição particionada no Server1 é definida da seguinte maneira:A partitioned view on Server1 is defined in the following way:

--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:Generally, a view is said to be a partitioned view if it is of the following form:

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 particionadasConditions for Creating Partitioned Views

  1. A list de seleçãoThe select list

    • Todas as colunas nas tabelas membro devem ser selecionadas na lista de colunas da definição de exibição.All columns in the member tables should be selected in the column list of the view definition.

    • As colunas na mesma posição ordinal de cada select list devem ser do mesmo tipo, incluindo ordenações.The columns in the same ordinal position of each select list should be of the same type, including collations. Não é suficiente para as colunas serem tipos conversíveis implicitamente, como em geral é o caso de UNION.It is not sufficient for the columns to be implicitly convertible types, as is generally the case for 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.Also, at least one column (for example <col>) must appear in all the select lists in the same ordinal position. Esse <col> deve ser definido de uma forma que as tabelas membro T1, ..., Tn tenham restrições CHECK C1, ..., Cn definidas em <col>, respectivamente.This <col> should be defined in a way that the member tables T1, ..., Tn have CHECK constraints C1, ..., Cn defined on <col>, respectively.

      A restrição C1 definida na tabela T1 deve ser da seguinte forma:Constraint C1 defined on table T1 must be of the following form:

      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.The constraints should be in such a way that any specified value of <col> can satisfy, at most, one of the constraints C1, ..., Cn so that the constraints should form a set of disjointed or nonoverlapping intervals. A coluna <col> na qual as restrições desunidas são definidas é chamada de coluna de particionamento.The column <col> on which the disjointed constraints are defined is called the partitioning column. Observe que a coluna de particionamento pode ter nomes diferentes nas tabelas subjacentes.Note that the partitioning column may have different names in the underlying tables. As restrições devem estar em um estado habilitado e confiável para que atendam às condições de coluna de particionamento mencionadas anteriormente.The constraints should be in an enabled and trusted state for them to meet the previously mentioned conditions of the partitioning column. Se as restrições forem desabilitadas, reabilite a verificação de restrição usando a opção CHECK CONSTRAINT constraint_name de ALTER TABLE e a opção WITH CHECK para validá-las.If the constraints are disabled, re-enable constraint checking by using the CHECK CONSTRAINT constraint_name option of ALTER TABLE, and using the WITH CHECK option to validate them.

      Os exemplos a seguir mostram conjuntos válidos de restrições:The following examples show valid sets of constraints:

      { [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.The same column cannot be used multiple times in the select list.

  2. Coluna de particionamentoPartitioning column

    • A coluna de particionamento faz parte da PRIMARY KEY da tabela.The partitioning column is a part of the PRIMARY KEY of the table.

    • Ela não pode ser uma coluna computada, de identidade, padrão nem timestamp.It cannot be a computed, identity, default, or timestamp column.

    • 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.If there is more than one constraint on the same column in a member table, the Database Engine ignores all the constraints and does not consider them when determining whether the view is a partitioned view. Para conhecer as condições da exibição particionada, deve haver somente uma restrição de particionamento na coluna de particionamento.To meet the conditions of the partitioned view, there should be only one partitioning constraint on the partitioning column.

    • Não há nenhuma restrição na capacidade de atualização da coluna de particionamento.There are no restrictions on the updatability of the partitioning column.

  3. Tabelas membro ou tabelas subjacentes T1, ..., TnMember tables, or underlying tables T1, ..., Tn

    • As tabelas podem ser tabelas locais ou tabelas de outros computadores que executam o SQL ServerSQL Server referenciadas através de um nome de quatro partes ou um nome baseado em OPENDATASOURCE ou OPENROWSET.The tables can be either local tables or tables from other computers that are running SQL ServerSQL Server that are referenced either through a four-part name or an OPENDATASOURCE- or OPENROWSET-based name. A sintaxe OPENDATASOURCE e OPENROWSET pode especificar um nome de tabela, mas não uma consulta de passagem.The OPENDATASOURCE and OPENROWSET syntax can specify a table name, but not a pass-through query. Para obter mais informações, veja OPENDATASOURCE (Transact-SQL) e OPENROWSET (Transact-SQL).For more information, see OPENDATASOURCE (Transact-SQL) and 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.If one or more of the member tables are remote, the view is called distributed partitioned view, and additional conditions apply. Elas são descritas posteriormente nesta seção.They are described later in this section.

    • A mesma tabela não pode aparecer duas vezes no conjunto de tabelas que estão sendo combinadas com a instrução UNION ALL.The same table cannot appear two times in the set of tables that are being combined with the UNION ALL statement.

    • As tabelas membro não podem ter índices criados em qualquer coluna computada na tabela.The member tables cannot have indexes created on computed columns in the table.

    • As tabelas membro devem ter todas as restrições PRIMARY KEY no mesmo número de colunas.The member tables should have all PRIMARY KEY constraints on the same number of columns.

    • Todas as tabelas de membro na exibição devem ter a mesma configuração de preenchimento ANSI.All member tables in the view should have the same ANSI padding setting. Isso pode ser definido usando a opção user options em sp_configure ou a instrução SET.This can be set by using either the user options option in sp_configure or the SET statement.

Condições para modificar dados em exibições particionadasConditions for Modifying Data in Partitioned Views

As seguintes restrições se aplicam a instruções que modificam dados nas exibições particionadas:The following restrictions apply to statements that modify data in partitioned views:

  • A instrução INSERT deve fornecer valores para todas as colunas na exibição, mesmo que as tabelas membro subjacentes tenham uma restrição DEFAULT para essas colunas ou que permitam valores nulos.The INSERT statement must supply values for all the columns in the view, even if the underlying member tables have a DEFAULT constraint for those columns or if they allow for null values. Para essas colunas de tabela membro com definições DEFAULT, as instruções não podem usar a palavra-chave DEFAULT explicitamente.For those member table columns that have DEFAULT definitions, the statements cannot explicitly use the keyword DEFAULT.

  • O valor a ser inserido na coluna de particionamento deve satisfazer pelo menos uma das restrições subjacentes; caso contrário, a ação de inserção falhará com uma violação de restrição.The value being inserted into the partitioning column should satisfy at least one of the underlying constraints; otherwise, the insert action will fail with a constraint violation.

  • As instruções UPDATE não podem especificar a palavra-chave DEFAULT como valor na cláusula SET, mesmo que a coluna tenha um valor DEFAULT definido na tabela membro correspondente.UPDATE statements cannot specify the DEFAULT keyword as a value in the SET clause, even if the column has a DEFAULT value defined in the corresponding member table.

  • As colunas na exibição que estiverem em uma coluna de identidade de uma ou mais tabelas membro não poderão ser modificadas através de uma instrução INSERT ou UPDATE.Columns in the view that are an identity column in one or more of the member tables cannot be modified by using an INSERT or UPDATE statement.

  • Se uma das tabelas membro tiver uma coluna timestamp, os dados não poderão ser modificados por meio de uma instrução INSERT ou UPDATE.If one of the member tables contains a timestamp column, the data cannot be modified by using an INSERT or UPDATE statement.

  • Se uma das tabelas membro tiver um gatilho ou uma restrição ON UPDATE CASCADE/SET NULL/SET DEFAULT ou ON DELETE CASCADE/SET NULL/SET DEFAULT, a exibição não poderá ser modificada.If one of the member tables contains a trigger or an ON UPDATE CASCADE/SET NULL/SET DEFAULT or ON DELETE CASCADE/SET NULL/SET DEFAULT constraint, the view cannot be modified.

  • As ações INSERT, UPDATE e DELETE em uma exibição particionada não são permitidas quando há uma autojunção com a mesma exibição ou com qualquer uma das tabelas membro na instrução.INSERT, UPDATE, and DELETE actions against a partitioned view are not allowed if there is a self-join with the same view or with any of the member tables in the statement.

  • Não há compatibilidade com a importação de dados em uma exibição particionada por bcp ou pelas instruções BULK INSERT e INSERT... SELECT * FROM OPENROWSET(BULK...).Bulk importing data into a partitioned view is unsupported by bcp or the BULK INSERT and INSERT ... SELECT * FROM OPENROWSET(BULK...) statements. Entretanto, é possível inserir várias linhas em uma exibição particionada usando uma instrução INSERT.However, you can insert multiple rows into a partitioned view by using the INSERT statement.

    Observação

    Para atualizar uma exibição particionada, o usuário deve ter as permissões INSERT, UPDATE e DELETE nas tabelas membro.To update a partitioned view, the user must have INSERT, UPDATE, and DELETE permissions on the member tables.

Condições adicionais para exibições particionadas distribuídasAdditional Conditions for Distributed Partitioned Views

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:For distributed partitioned views (when one or more member tables are remote), the following additional conditions apply:

  • Uma transação distribuída será iniciada para garantir a atomicidade em todos os nós afetados pela atualização.A distributed transaction will be started to guarantee atomicity across all nodes affected by the update.

  • Para funcionar, a opção XACT_ABORT SET deve ser definida como instruções ON para INSERT, UPDATE ou DELETE.The XACT_ABORT SET option should be set to ON for INSERT, UPDATE, or DELETE statements to work.

  • Qualquer coluna nas tabelas remotas do tipo smallmoney referenciadas em uma exibição particionada são mapeadas como money.Any columns in remote tables of type smallmoney that are referenced in a partitioned view are mapped as 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.Therefore, the corresponding columns (in the same ordinal position in the select list) in the local tables must also be of type 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.Under database compatibility level 110 and higher, any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. As colunas correspondentes (na mesma posição ordinal na lista de seleção) nas tabelas locais devem ser smalldatetime.Corresponding columns (in the same ordinal position in the select list) in the local tables must be smalldatetime. Essa é uma alteração no comportamento de versões anteriores do SQL ServerSQL 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.This is a change in behavior from earlier versions of SQL ServerSQL Server in which any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime and corresponding columns in local tables must be of type datetime. Para obter mais informações, veja Nível de compatibilidade de ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

  • Qualquer servidor vinculado na exibição particionada não pode ser um servidor vinculado de loopback.Any linked server in the partitioned view cannot be a loopback linked server. Este é um servidor vinculado que aponta para a mesma instância do SQL ServerSQL Server.This is a linked server that points to the same instance of SQL ServerSQL Server.

A configuração da opção SET ROWCOUNT é ignorada para ações INSERT, UPDATE e DELETE que envolvam exibições particionadas atualizáveis e tabelas remotas.The setting of the SET ROWCOUNT option is ignored for INSERT, UPDATE, and DELETE actions that involve updatable partitioned views and remote tables.

Quando as tabelas membro e a definição de exibição particionada estão em vigor, o otimizador de consulta do SQL ServerSQL Server cria planos inteligentes que usam consultas de forma eficiente para acessar dados de tabelas membro.When the member tables and partitioned view definition are in place, the SQL ServerSQL Server query optimizer builds intelligent plans that use queries efficiently to access data from member tables. Com as definições da restrição CHECK, o processador de consulta mapeia a distribuição de valores de chave nas tabelas membro.With the CHECK constraint definitions, the query processor maps the distribution of key values across the member tables. Quando um usuário emite uma consulta, o processador de consulta compara o mapa com os valores especificados na cláusula WHERE e cria um plano de execução com uma quantidade mínima de transferência de dados entre os servidores membro.When a user issues a query, the query processor compares the map to the values specified in the WHERE clause, and builds an execution plan with a minimal amount of data transfer between member servers. Assim, embora algumas tabelas membro possam ser localizadas em servidores remotos, a instância do SQL ServerSQL Server resolve consultas distribuídas de forma que a quantidade de dados distribuídos a ser transferida seja mínima.Therefore, although some member tables may be located in remote servers, the instance of SQL ServerSQL Server resolves distributed queries so that the amount of distributed data that has to be transferred is minimal.

Considerações sobre replicaçãoConsiderations for Replication

Para criar exibições particionadas em tabelas membro envolvidas em replicação, as seguintes considerações são aplicáveis:To create partitioned views on member tables that are involved in replication, the following considerations apply:

  • Se as tabelas subjacentes estiverem envolvidas em replicação de mesclagem ou replicação transacional com assinaturas de atualização, a coluna uniqueidentifier também deverá ser incluída na lista de seleção.If the underlying tables are involved in merge replication or transactional replication with updating subscriptions, the uniqueidentifier column should also be included in the select list.

    Toda ação INSERT na exibição particionada deve fornecer um valor NEWID() para a coluna uniqueidentifier.Any INSERT actions into the partitioned view must provide a NEWID() value for the uniqueidentifier column. As ações UPDATE na coluna uniqueidentifier devem fornecer NEWID() como o valor, pois a palavra-chave DEFAULT não pode ser usada.Any UPDATE actions against the uniqueidentifier column must supply NEWID() as the value because the DEFAULT keyword cannot be used.

  • 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.The replication of updates made by using the view is the same as when tables are replicated in two different databases: the tables are served by different replication agents and the order of the updates is not guaranteed.

PermissõesPermissions

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.Requires CREATE VIEW permission in the database and ALTER permission on the schema in which the view is being created.

ExemplosExamples

Os exemplos a seguir usam o banco de dados AdventureWorks 2012 ou AdventureWorksDW.The following examples use the AdventureWorks 2012 or AdventureWorksDW database.

A.A. Usando uma CREATE VIEW simplesUsing a simple CREATE VIEW

O exemplo a seguir cria uma exibição usando uma instrução SELECT simples.The following example creates a view by using a simple SELECT statement. Uma exibição simples é útil quando uma combinação de colunas é consultada com frequência.A simple view is helpful when a combination of columns is queried frequently. Os dados dessa exibição vêm das tabelas HumanResources.Employee e Person.Person do banco de dados AdventureWorks2012AdventureWorks2012.The data from this view comes from the HumanResources.Employee and Person.Person tables of the AdventureWorks2012AdventureWorks2012 database. Os dados fornecem o nome e informações de data de contratação dos funcionários da Ciclos da Adventure WorksAdventure Works Cycles.The data provides name and hire date information for the employees of Ciclos da Adventure WorksAdventure Works Cycles. 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.The view could be created for the person in charge of tracking work anniversaries but without giving this person access to all the data in these tables.

CREATE VIEW hiredate_view  
AS   
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate  
FROM HumanResources.Employee e   
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;  
GO  
  

b.B. Usando WITH ENCRYPTIONUsing WITH ENCRYPTION

O exemplo a seguir usa a opção WITH ENCRYPTION e mostra colunas computadas, colunas renomeadas e várias colunas.The following example uses the WITH ENCRYPTION option and shows computed columns, renamed columns, and multiple columns.

Aplica-se a: SQL Server 2008SQL Server 2008 a SQL Server 2017SQL Server 2017 e Banco de Dados SQLSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Banco de Dados SQLSQL Database.

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.C. Usando WITH CHECK OPTIONUsing WITH CHECK OPTION

O exemplo a seguir mostra uma exibição chamada SeattleOnly que referencia cinco tabelas e permite que as modificações de dados se apliquem somente a funcionários que vivem em Seattle.The following example shows a view named SeattleOnly that references five tables and allows for data modifications to apply only to employees who live in 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.D. Usando funções internas em uma exibiçãoUsing built-in functions within a view

O exemplo a seguir mostra uma definição de exibição que inclui uma função interna.The following example shows a view definition that includes a built-in function. Ao usar funções, é necessário especificar um nome de coluna para a coluna derivada.When you use functions, you must specify a column name for the derived column.

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.E. Usando dados particionadosUsing partitioned data

O exemplo a seguir usa as tabelas chamadas SUPPLY1, SUPPLY2, SUPPLY3 e SUPPLY4.The following example uses tables named SUPPLY1, SUPPLY2, SUPPLY3, and SUPPLY4. Essas tabelas correspondem às tabelas de fornecedor de quatro escritórios, localizados em países/regiões diferentes.These tables correspond to the supplier tables from four offices, located in different countries/regions.

--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: SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

F.F. Criando uma exibição simplesCreating a simple view

O exemplo a seguir cria uma exibição selecionando apenas algumas das colunas da tabela de origem.The following example creates a view by selecting only some of the columns from the source table.

CREATE VIEW DimEmployeeBirthDates AS  
SELECT FirstName, LastName, BirthDate   
FROM DimEmployee;  

G.G. Criar um modo de exibição unindo duas tabelasCreate a view by joining two tables

O exemplo a seguir cria uma exibição usando uma instrução SELECT com um OUTER JOIN.The following example creates a view by using a SELECT statement with an OUTER JOIN. Os resultados da consulta de junção preenchem a exibição.The results of the join query populate the view.

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

Consulte TambémSee Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
ALTER VIEW (Transact-SQL) ALTER VIEW (Transact-SQL)
DELETE (Transact-SQL) DELETE (Transact-SQL)
DROP VIEW (Transact-SQL) DROP VIEW (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
Criar um procedimento armazenado Create a Stored Procedure
sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL) sys.dm_sql_referencing_entities (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helptext (Transact-SQL) sp_helptext (Transact-SQL)
sp_refreshview (Transact-SQL) sp_refreshview (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
sys.views (Transact-SQL) sys.views (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)