Nível de compatibilidade de ALTER DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL) Compatibility Level

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Define Transact-SQLTransact-SQL e comportamentos de processamento de consulta como sendo compatíveis com a versão especificada do Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine.Sets Transact-SQLTransact-SQL and query processing behaviors to be compatible with the specified version of the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine. Para obter outras opções de ALTER DATABASE, confira ALTER DATABASE.For other ALTER DATABASE options, see ALTER DATABASE.

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe Transact-SQL.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

SintaxeSyntax

ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 150 | 140 | 130 | 120 | 110 | 100 | 90 }

ArgumentosArguments

database_name database_name
É o nome do banco de dados a ser modificado.Is the name of the database to be modified.

COMPATIBILITY_LEVEL { 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }COMPATIBILITY_LEVEL { 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }
É a versão do SQL ServerSQL Server com a qual o banco de dados será compatível.Is the version of SQL ServerSQL Server with which the database is to be made compatible. Os seguintes valores de nível de compatibilidade podem ser configurados (nem todas as versões dão suporte a todos os níveis de compatibilidade listados acima):The following compatibility level values can be configured (not all versions supports all of the above listed compatibility level):

ProductProduct Versão do Mecanismo de Banco de DadosDatabase Engine Version Designação de nível de compatibilidade padrãoDefault Compatibility Level Designation Valores do nível de compatibilidade com suporteSupported Compatibility Level Values
SQL Server 2019 (15.x)SQL Server 2019 (15.x) 1515 150150 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1414 140140 140, 130, 120, 110, 100140, 130, 120, 110, 100
Banco de dados SQL do AzureAzure SQL Database banco de dados individual/pool elásticosingle database/elastic pool 1212 140140 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
Banco de dados SQL do AzureAzure SQL Database instância gerenciadamanaged instance 1212 140140 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
SQL Server 2016 (13.x)SQL Server 2016 (13.x) 1313 130130 130, 120, 110, 100130, 120, 110, 100
SQL Server 2014 (12.x)SQL Server 2014 (12.x) 1212 120120 120, 110, 100120, 110, 100
SQL Server 2012 (11.x)SQL Server 2012 (11.x) 1111 110110 110, 100, 90110, 100, 90
SQL Server 2008 R2SQL Server 2008 R2 10.510.5 100100 100, 90, 80100, 90, 80
SQL Server 2008SQL Server 2008 1010 100100 100, 90, 80100, 90, 80
SQL Server 2005 (9.x)SQL Server 2005 (9.x) 99 9090 90, 8090, 80
SQL Server 2000SQL Server 2000 88 8080 8080

RemarksRemarks

Para todas as instalações do SQL ServerSQL Server, o nível de compatibilidade padrão é definido com a versão do Mecanismo de Banco de DadosDatabase Engine.For all installations of SQL ServerSQL Server, the default compatibility level is set to the version of the Mecanismo de Banco de DadosDatabase Engine. Novos bancos de dados são definidos como esse nível, a não ser que o banco de dados do modelo tenha um nível de compatibilidade inferior.New databases are set to this level unless the model database has a lower compatibility level. Para bancos de dados anexados ou restaurados de qualquer versão anterior de SQL ServerSQL Server, o banco de dados reterá seu nível de compatibilidade existente se tiver o mínimo de permissão para essa instância do SQL ServerSQL Server.For databases attached or restored from any earlier version of SQL ServerSQL Server, the database retains its existing compatibility level, if it is at least minimum allowed for that instance of SQL ServerSQL Server. Mover um banco de dados com um nível de compatibilidade mais baixo do que o nível permitido pelo Mecanismo de Banco de DadosDatabase Engine define automaticamente o banco de dados para o nível de compatibilidade mais baixo permitido.Moving a database with a compatibility level lower than the allowed level by the Mecanismo de Banco de DadosDatabase Engine, automatically sets the database to the lowest compatibility level allowed. Isso se aplica aos bancos de dados do sistema e de usuário.This applies to both system and user databases.

Os comportamentos a seguir são esperadas para SQL Server 2017 (14.x)SQL Server 2017 (14.x) quando um banco de dados for anexado ou restaurado e após uma atualização in-loco:The below behaviors are expected for SQL Server 2017 (14.x)SQL Server 2017 (14.x) when a database is attached or restored, and after an in-place upgrade:

  • Se o nível de compatibilidade de um banco de dados de usuário era 100 ou mais alto antes da atualização, ele permanecerá o mesmo depois da atualização.If the compatibility level of a user database was 100 or higher before the upgrade, it remains the same after upgrade.
  • Se o nível de compatibilidade de um banco de dados do usuário era 90 antes da atualização, no banco de dados atualizado esse nível será definido como 100, que é o mais baixo com suporte no SQL Server 2017 (14.x)SQL Server 2017 (14.x).If the compatibility level of a user database was 90 before upgrade, in the upgraded database, the compatibility level is set to 100, which is the lowest supported compatibility level in SQL Server 2017 (14.x)SQL Server 2017 (14.x).
  • Os níveis de compatibilidade dos bancos de dados tempdb, model, msdb e Resource são definidos para o nível de compatibilidade padrão para determinada versão do Mecanismo de Banco de DadosDatabase Engine.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the default compatibility level for a given Mecanismo de Banco de DadosDatabase Engine version.
  • O banco de dados do sistema mestre retém o nível de compatibilidade anterior ao upgrade.The master system database retains the compatibility level it had before upgrade.

Use ALTER DATABASE para alterar o nível de compatibilidade do banco de dados.Use ALTER DATABASE to change the compatibility level of the database. A nova configuração do nível de compatibilidade de um banco de dados tem efeito quando um comando USE <database> é emitido ou um novo logon é processado com esse banco de dados como o contexto do banco de dados padrão.The new compatibility level setting for a database takes effect when a USE <database> command is issued, or a new login is processed with that database as the default database context. Para exibir o nível de compatibilidade atual de um banco de dados, consulte a coluna compatibility_level na exibição do catálogo sys.databases.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

Observação

Um banco de dados de distribuição criado em uma versão anterior do SQL ServerSQL Server e atualizado para o SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM ou o Service Pack 1 tem um nível de compatibilidade 90, para o qual não há suporte em outros bancos de dados.A distribution database that was created in an earlier version of SQL ServerSQL Server and is upgraded to SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM or Service Pack 1 has a compatibility level of 90, which is not supported for other databases. Isso não tem um impacto sobre a funcionalidade de replicação.This does not have an impact on the functionality of replication. A atualização para service packs e versões posteriores do SQL ServerSQL Server resultará no aumento do nível de compatibilidade do banco de dados de distribuição para que ele corresponda ao banco de dados mestre.Upgrading to later service packs and versions of SQL ServerSQL Server will result in the compatibility level of the distribution database to be increased to match that of the master database.

Observação

A partir de janeiro de 2018, no Banco de dados SQL do AzureAzure SQL Database, o nível de compatibilidade padrão é 140 para bancos de dados recém-criados.As of January 2018, in Banco de dados SQL do AzureAzure SQL Database, the default compatibility level is 140 for newly created databases. O MicrosoftMicrosoft não atualiza o nível de compatibilidade dos bancos de dados existentes.MicrosoftMicrosoft does not update database compatibility level for existing databases. É responsabilidade dos clientes fazer isso a seu critério.It is up to customers to do at their own discretion.
A MicrosoftMicrosoft recomenda que os clientes planejem atualizar para o último nível de compatibilidade, para aproveitar as últimas melhorias de otimização de consulta.MicrosoftMicrosoft highly recommends that customers plan to upgrade to the latest compatibility level in order to leverage the latest query optimization improvements.

Para aproveitar o nível de compatibilidade do banco de dados 140 para seu banco de dados geral, mas optar pelo modelo de estimativa de cardinalidade de SQL Server 2012 (11.x)SQL Server 2012 (11.x), que mapeia para o nível de compatibilidade do banco de dados 110, veja ALTER DATABASE SCOPED CONFIGURATION e, em especial, sua palavra-chave LEGACY_CARDINALITY_ESTIMATION = ON.To leverage database compatibility level 140 for a database overall, but opt-in to the cardinality estimation model of SQL Server 2012 (11.x)SQL Server 2012 (11.x), which maps to database compatibility level 110, see ALTER DATABASE SCOPED CONFIGURATION, and in particular its keyword LEGACY_CARDINALITY_ESTIMATION = ON.

Para obter detalhes sobre como avaliar as diferenças de desempenho das consultas mais importantes, entre dois níveis de compatibilidade diferentes no Banco de dados SQL do AzureAzure SQL Database, confira Melhor desempenho de consultas com o nível de compatibilidade 130 no Banco de Dados SQL do Azure.For details about how to assess the performance differences of your most important queries, between two different compatibility levels on Banco de dados SQL do AzureAzure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database. Observe que este artigo se refere ao nível de compatibilidade 130 e ao SQL ServerSQL Server, mas a mesma metodologia se aplica a atualizações para o nível 140 no SQL ServerSQL Server e no Banco de dados SQL do AzureAzure SQL Database.Note that this article refers to compatibility level 130 and SQL ServerSQL Server, but the same methodology applies for upgrades to 140 in SQL ServerSQL Server and Banco de dados SQL do AzureAzure SQL Database.

Para determinar a versão do Mecanismo de Banco de DadosDatabase Engine à qual você está conectado, execute a consulta a seguir.To determine the version of the Mecanismo de Banco de DadosDatabase Engine that you are connected to, execute the following query.

SELECT SERVERPROPERTY('ProductVersion');

Observação

Nem todos os recursos que variam de acordo com o nível de compatibilidade são compatíveis com o Banco de dados SQL do AzureAzure SQL Database.Not all features that vary by compatibility level are supported on Banco de dados SQL do AzureAzure SQL Database.

Para determinar o nível de compatibilidade atual, consulte a coluna compatibility_level de sys.databases.To determine the current compatibility level, query the compatibility_level column of sys.databases.

SELECT name, compatibility_level FROM sys.databases;

Níveis de compatibilidade e atualizações do Mecanismo de Banco de DadosCompatibility levels and Database Engine upgrades

O nível de compatibilidade do banco de dados é uma ferramenta valiosa para ajudar na modernização de banco de dados, permitindo que o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine seja atualizado, mantendo o status funcional de aplicativos conexão e o mesmo nível de compatibilidade do banco de dados antes da atualização.Database compatibility level is a valuable tool to assist in database modernization, by allowing the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine to be upgraded, while keeping connecting applications functional status by maintaining the same pre-upgrade database compatibility level. Isso significa que é possível atualizar de uma versão mais antiga de SQL ServerSQL Server (como SQL Server 2008SQL Server 2008) para SQL Server 2017SQL Server 2017 ou Banco de dados SQL do AzureAzure SQL Database (incluindo a Instância Gerenciada) sem alterações do aplicativo (exceto a conectividade do banco de dados).This means that it is possible to upgrade from an older version of SQL ServerSQL Server (such as SQL Server 2008SQL Server 2008) to SQL Server 2017SQL Server 2017 or Banco de dados SQL do AzureAzure SQL Database (including Managed Instance) with no application changes (except for database connectivity). Para saber mais, confira Certificação de Compatibilidade.For more information, see Compatibility Certification.

Desde que o aplicativo não precise aproveitar os aprimoramentos que estão disponíveis somente em um nível mais alto de compatibilidade do banco de dados, esta é uma abordagem válida para atualizar o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine e manter o nível de compatibilidade do banco de dados anterior.As long as the application does not need to leverage enhancements that are only available in a higher database compatibility level, it is a valid approach to upgrade the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine and maintain the previous database compatibility level. Para saber mais sobre como usar o nível de compatibilidade para compatibilidade com versões anteriores, confira Certificação de Compatibilidade.For more information on using compatibility level for backward compatibility, see Compatibility Certification.

Melhores práticas para atualizar o nível de compatibilidade do banco de dadosBest Practices for upgrading Database Compatibility Level

Para obter o fluxo de trabalho recomendado para atualizar o nível de compatibilidade, confira Alterar o modo de compatibilidade do banco de dados e usar o Repositório de Consultas.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and use the Query Store. Além disso, para uma experiência assistida com a atualização do nível de compatibilidade do banco de dados, confira Atualizando bancos de dados usando o Assistente de Ajuste de Consulta.Additionally, for an assisted experience with upgrading the database compatibility level, see Upgrading Databases by using the Query Tuning Assistant.

Níveis de compatibilidade e procedimentos armazenadosCompatibility Levels and Stored Procedures

Quando um procedimento armazenado é executado, ele usa o nível de compatibilidade atual do banco de dados no qual está definido.When a stored procedure executes, it uses the current compatibility level of the database in which it is defined. Quando a configuração de compatibilidade de um banco de dados é alterada, todos os seus procedimentos armazenados são recompilados automaticamente conforme necessário.When the compatibility setting of a database is changed, all of its stored procedures are automatically recompiled accordingly.

Usar o nível de compatibilidade para compatibilidade com versões anterioresUsing compatibility level for backward compatibility

A configuração nível de compatibilidade do banco de dados oferece compatibilidade com versões anteriores do SQL ServerSQL Server com relação ao Transact-SQLTransact-SQL e comportamentos de otimização de consulta apenas para o banco de dados especificado, não para todo o servidor.The database compatibility level setting provides backward compatibility with earlier versions of SQL ServerSQL Server in what relates to Transact-SQLTransact-SQL and query optimization behaviors only for the specified database, not for the entire server.

Começando com o modo de compatibilidade 130, qualquer plano de consulta novo que afete recursos foi adicionado intencionalmente apenas ao novo nível de compatibilidade.Starting with compatibility mode 130, any new query plan affecting features have been intentionally added only to the new compatibility level. Isso foi feito para minimizar o risco durante as atualizações que surge da degradação do desempenho devido a alterações no plano de consulta potencialmente introduzidas pelos novos comportamentos de otimização de consulta.This has been done in order to minimize the risk during upgrades that arise from performance degradation due to query plan changes potentially introduced by new query optimization behaviors.

Da perspectiva do aplicativo, use o nível de compatibilidade mais baixo como um caminho de migração mais seguro para trabalhar com diferenças de versões nos comportamentos controlados pela configuração de nível de compatibilidade relevante.From an application perspective, use the lower compatibility level as a safer migration path to work around version differences, in the behaviors that are controlled by the relevant compatibility level setting. A meta ainda deve ser atualizar para o último nível de compatibilidade em algum ponto no tempo, para herdar alguns dos novos recursos, como o Processamento de Consulta Inteligente, mas fazer isso de maneira controlada.The goal should still be to upgrade to the latest compatibility level at some point in time, in order to inherit some of the new features such as Intelligent Query Processing, but to do so in a controlled way.

Para obter mais detalhes, incluindo o fluxo de trabalho recomendado para atualizar o nível de compatibilidade do banco de dados, confira Melhores práticas para atualizar o nível de compatibilidade do banco de dados.For more details, including the recommended workflow for upgrading database compatibility level, see Best Practices for upgrading Database Compatibility Level.

Importante

A funcionalidade descontinuada introduzida em uma determinada versão do SQL ServerSQL Server não é protegida pelo nível de compatibilidade.Discontinued functionality introduced in a given SQL ServerSQL Server version is not protected by compatibility level. Refere-se à funcionalidade removida do Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine.This refers to functionality that was removed from the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine. Por exemplo, a dica FASTFIRSTROW foi descontinuada no SQL Server 2012 (11.x)SQL Server 2012 (11.x) e substituída pela dica OPTION (FAST n ).For example, the FASTFIRSTROW hint was discontinued in SQL Server 2012 (11.x)SQL Server 2012 (11.x) and replaced with the OPTION (FAST n ) hint. A definição do nível de compatibilidade do banco de dados como 110 não restaurará a dica descontinuada.Setting the database compatibility level to 110 will not restore the discontinued hint.

Para saber mais sobre a funcionalidade descontinuada, confira Funcionalidade descontinuada do Mecanismo de Banco de Dados no SQL Server 2016, Funcionalidade descontinuada do Mecanismo de Banco de Dados no SQL Server 2014 e Funcionalidade descontinuada do Mecanismo de Banco de Dados no SQL Server 2012.For more information on discontinued functionality, see Discontinued Database Engine Functionality in SQL Server 2016, Discontinued Database Engine Functionality in SQL Server 2014, and Discontinued Database Engine Functionality in SQL Server 2012.

Importante

As alterações da falha introduzidas em uma determinada versão do SQL ServerSQL Server podem não estar protegidas pelo nível de compatibilidade.Breaking changes introduced in a given SQL ServerSQL Server version may not be protected by compatibility level. Refere-se às alterações de comportamento entre versões do Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine.This refers to behavior changes between versions of the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine. Geralmente, o comportamento do Transact-SQLTransact-SQL é protegido pelo nível de compatibilidade.Transact-SQLTransact-SQL behavior is usually protected by compatibility level. No entanto, os objetos do sistema alterados ou removidos não são protegidos pelo nível de compatibilidade.However, changed or removed system objects are not protected by compatibility level.

Um exemplo de uma alteração recente protegida pelo nível de compatibilidade é uma conversão implícita dos tipos de dados datetime em datetime2.An example of a breaking change protected by compatibility level is an implicit conversion from datetime to datetime2 data types. No nível de compatibilidade do banco de dados 130, eles mostram uma precisão aprimorada, levando em conta os milissegundos fracionários, resultando em diferentes valores convertidos.Under database compatibility level 130, these show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values. Para restaurar o comportamento de conversão anterior, defina o nível de compatibilidade do banco de dados como 120 ou inferior.To restore previous conversion behavior, set the database compatibility level to 120 or lower.

Exemplos de alterações recentes não protegidas pelo nível de compatibilidade são:Examples of breaking changes not protected by compatibility level are:

  • Alterações de nomes de coluna em objetos do sistema.Changed column names in system objects. No SQL Server 2012 (11.x)SQL Server 2012 (11.x), a coluna single_pages_kb no sys.dm_os_sys_info foi renomeada para pages_kb.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the column single_pages_kb in sys.dm_os_sys_info was renamed to pages_kb. Seja qual for o nível de compatibilidade, a consulta SELECT single_pages_kb FROM sys.dm_os_sys_info gerará o erro 207 (Nome de coluna inválido).Regardless of the compatibility level, the query SELECT single_pages_kb FROM sys.dm_os_sys_info will produce error 207 (Invalid column name).
  • Objetos do sistema removidos.Removed system objects. No SQL Server 2012 (11.x)SQL Server 2012 (11.x), o sp_dboption foi removido.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the sp_dboption was removed. Seja qual for o nível de compatibilidade, a instrução EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; gerará o erro 2812 (Não foi possível encontrar o procedimento armazenado 'sp_dboption').Regardless of the compatibility level, the statement EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; will produce error 2812 (Could not find stored procedure 'sp_dboption').

Para saber mais sobre alterações recentes, confira Alterações recentes em recursos do Mecanismo de Banco de Dados no SQL Server 2017, Alterações recentes em recursos do Mecanismo de Banco de Dados no SQL Server 2016, Alterações recentes em recursos do Mecanismo de Banco de Dados no SQL Server 2014 e Alterações recentes em recursos do Mecanismo de Banco de Dados no SQL Server 2012.For more information on breaking changes, see Breaking Changes to Database Engine Features in SQL Server 2017, Breaking Changes to Database Engine Features in SQL Server 2016, Breaking Changes to Database Engine Features in SQL Server 2014, and Breaking Changes to Database Engine Features in SQL Server 2012.

Diferenças entre os níveis de compatibilidade 140 e 150Differences Between Compatibility Level 140 and Level 150

Esta seção descreve os novos comportamentos introduzidos com o nível de compatibilidade 150.This section describes new behaviors introduced with compatibility level 150.

No momento, o nível 150 de compatibilidade do banco de dados está em Visualização Pública para Banco de dados SQL do AzureAzure SQL Database e SQL Server 2019 (15.x)SQL Server 2019 (15.x).Database compatibility level 150 is currently in Public Preview for Banco de dados SQL do AzureAzure SQL Database and SQL Server 2019 (15.x)SQL Server 2019 (15.x). Esse nível de compatibilidade do banco de dados será associado à próxima geração de aprimoramentos de processamento de consulta, além do que foi introduzido no nível de compatibilidade 140 do banco de dados.This database compatibility level will be associated with the next generation of query processing improvements beyond what was introduced in database compatibility level 140.

Configuração no nível de compatibilidade 140 ou inferiorCompatibility-level setting of 140 or lower Configuração no nível de compatibilidade 150Compatibility-level setting of 150
O armazenamento de dados relacional e as cargas de trabalho analíticas podem não aproveitar os índices columnstore devido à sobrecarga de OLTP, falta de suporte do fornecedor ou outras limitações.Relational data warehouse and analytic workloads may not be able to leverage columnstore indexes due to OLTP-overhead, lack of vendor support or other limitations. Sem índices columnstore, essas cargas de trabalho não podem se beneficiar do modo de execução de lote.Without columnstore indexes, these workloads cannot benefit from batch execution mode. O modo de execução de lote já está disponível para cargas de trabalho analíticas sem a necessidade de índices columnstore.Batch execution mode is now available for analytic workloads without requiring columnstore indexes. Para saber mais, confira modo de lote em rowstore.For more information, see batch mode on rowstore.
As consultas do modo de linha que solicitam tamanhos insuficientes de concessão de memória que resultam em despejos em disco podem continuar apresentando problemas em execuções consecutivas.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Consultas do modo de linha que solicitam tamanhos insuficientes de concessão de memória que resultam em despejos em disco podem ter um melhor desempenho em execuções consecutivas.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Para saber mais, confira comentários de concessão de memória do modo de linha.For more information, see row mode memory grant feedback.
Consultas do modo de linha que solicitam um tamanho excessivo de concessão de memória que resulta em problemas de simultaneidade podem continuar apresentando problemas em execuções consecutivas.Row-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Consultas de modo de linha que solicitam um tamanho excessivo de concessão de memória que resulta em problemas de simultaneidade podem ter uma melhor simultaneidade em execuções consecutivas.Row-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Para saber mais, confira comentários de concessão de memória do modo de linha.For more information, see row mode memory grant feedback.
Consultas que fazem referência a UDFs escalares do T-SQL usarão a invocação iterativa, que não apresenta o cálculo de custos e força a execução serial.Queries referencing T-SQL scalar UDFs will use iterative invocation, lack costing and force serial execution. Os UDFs escalares do T-SQL são transformados em expressões relacionais equivalentes que são "embutidas" na consulta que fez a chamada, geralmente resultando em ganhos significativos de desempenho.T-SQL scalar UDFs are transformed into equivalent relational expressions that are “inlined” into the calling query, often resulting in significant performance gains. Para saber mais, confira Inlining de UDF escalar do T-SQL.For more information, see T-SQL scalar UDF inlining.
As variáveis de tabela usam um palpite fixo para a estimativa de cardinalidade.Table variables use a fixed guess for the cardinality estimate. Se o número real de linhas for muito superior ao valor do palpite, o desempenho das operações de downstream poderá ser afetado.If the actual number of rows is much higher than the guessed value, performance of downstream operations can suffer. Os novos planos usarão a cardinalidade real da variável de tabela encontrada na primeira compilação em vez de uma estimativa fixa.New plans will use the actual cardinality of the table variable encountered on first compilation instead of a fixed guess. Para saber mais, confira compilação adiada de variável da tabela.For more information, see table variable deferred compilation.

Confira mais informações sobre os recursos de processamento de consulta habilitados no nível 150 de compatibilidade do banco de dados em Novidades no SQL Server 2019 e em Processamento inteligente de consultas em bancos de dados SQL.For more information on query processing features enabled in database compatibility level 150, refer to What's new in SQL Server 2019 and Intelligent query processing in SQL databases.

Diferenças entre os níveis de compatibilidade 130 e 140Differences Between Compatibility Level 130 and Level 140

Esta seção descreve os novos comportamentos introduzidos com o nível de compatibilidade 140.This section describes new behaviors introduced with compatibility level 140.

Configuração de nível de compatibilidade 130 ou inferiorCompatibility-level setting of 130 or lower Configuração de nível de compatibilidade 140Compatibility-level setting of 140
As estimativas de cardinalidade para instruções que referenciam funções com valor de tabela de várias instruções usam uma estimativa de linha fixa.Cardinality estimates for statements referencing multi-statement table-valued functions use a fixed row guess. As estimativas de cardinalidade para instruções qualificadas que referenciam funções com valor de tabela de várias instruções usarão a cardinalidade real da saída da função.Cardinality estimates for eligible statements referencing multi-statement table-valued functions will use the actual cardinality of the function output. Isso é habilitado por meio da execução intercalada para funções com valor de tabela de várias instruções.This is enabled via interleaved execution for multi-statement table-valued functions.
Consultas de modo de lote que solicitam tamanhos insuficientes de concessão de memória que resultam em despejos em disco podem continuar apresentando problemas em execuções consecutivas.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Consultas de modo de lote que solicitam tamanhos insuficientes de concessão de memória que resultam em despejos em disco podem ter um melhor desempenho em execuções consecutivas.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Isso é habilitado por meio de comentários de concessão de memória do modo de lote que atualizarão o tamanho da concessão de memória de um plano armazenado em cache se ocorreram despejos para operadores de modo de lote.This is enabled via batch mode memory grant feedback which will update the memory grant size of a cached plan if spills have occurred for batch mode operators.
Consultas de modo de lote que solicitam um tamanho excessivo de concessão de memória que resulta em problemas de simultaneidade podem continuar apresentando problemas em execuções consecutivas.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Consultas de modo de lote que solicitam um tamanho excessivo de concessão de memória que resulta em problemas de simultaneidade podem ter uma melhor simultaneidade em execuções consecutivas.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Isso é habilitado por meio de comentários de concessão de memória do modo de lote que atualizarão o tamanho de concessão de memória de um plano armazenado em cache se uma quantidade excessiva foi originalmente solicitada.This is enabled via batch mode memory grant feedback which will update the memory grant size of a cached plan if an excessive amount was originally requested.
As consultas de modo de lote que contém operadores de junção são qualificadas para três algoritmos de junção física, incluindo loop aninhado, junção hash e junção de mesclagem.Batch-mode queries that contain join operators are eligible for three physical join algorithms, including nested loop, hash join and merge join. Se as estimativas de cardinalidade estiverem incorretas para entradas de junção, um algoritmo de junção inadequado poderá ser selecionado.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. Se isso ocorrer, o desempenho será afetado e o algoritmo de junção inadequado permanecerá em uso até que o plano armazenado em cache seja recompilado.If this occurs, performance will suffer and the inappropriate join algorithm will remain in use until the cached plan is recompiled. Há um operador de junção adicional chamado junção adaptável.There is an additional join operator called adaptive join. Se as estimativas de cardinalidade estiverem incorretas para a entrada de junção de build externa, um algoritmo de junção inadequado poderá ser selecionado.If cardinality estimates are incorrect for the outer build join input, an inappropriate join algorithm may be selected. Se isso ocorrer e a instrução for qualificada para uma junção adaptável, um loop aninhado será usado para entradas de junção menores e uma junção hash será usada para entradas de junção maiores dinamicamente sem a necessidade de recompilação.If this occurs and the statement is eligible for an adaptive join, a nested loop will be used for smaller join inputs and a hash join will be used for larger join inputs dynamically without requiring recompilation.
Planos triviais que referenciam índices Columnstore não são qualificados para a execução em modo de lote.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Um plano trivial que referencia índices Columnstore será descartado em favor de um plano que é qualificado para a execução em modo de lote.A trivial plan referencing Columnstore indexes will be discarded in favor of a plan that is eligible for batch mode execution.
O operador sp_execute_external_script UDX apenas pode ser executado no modo de linha.The sp_execute_external_script UDX operator can only run in row mode. O operador sp_execute_external_script UDX é qualificado para a execução em modo de lote.The sp_execute_external_script UDX operator is eligible for batch mode execution.
As TVFs (funções com valor de tabela) de várias instruções não tem a execução intercaladaMulti-statement table-valued functions (TVF's) do not have interleaved execution Execução intercalada de TVFs de várias instruções para melhorar a qualidade do plano.Interleaved execution for multi-statement TVFs to improve plan quality.

As correções que estavam sob o sinalizador de rastreamento 4199 em versões anteriores do SQL Server anteriores ao SQL Server 2017 agora estão habilitadas por padrão.Fixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. Com o modo de compatibilidade 140.With compatibility mode 140. O sinalizador de rastreamento 4199 ainda será aplicável a novas correções do otimizador de consulta que são liberadas após o SQL Server 2017.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2017. Para obter informações sobre o Sinalizador de Rastreamento 4199, consulte Sinalizador de rastreamento 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Diferenças entre os níveis de compatibilidade 120 e 130Differences Between Compatibility Level 120 and Level 130

Esta seção descreve os novos comportamentos introduzidos com o nível de compatibilidade 130.This section describes new behaviors introduced with compatibility level 130.

Configuração de nível de compatibilidade 120 ou inferiorCompatibility-level setting of 120 or lower Configuração de nível de compatibilidade 130Compatibility-level setting of 130
O INSERT em uma instrução INSERT-SELECT é single-thread.The INSERT in an INSERT-SELECT statement is single-threaded. O INSERT em uma instrução INSERT-SELECT tem vários threads ou pode ter um plano paralelo.The INSERT in an INSERT-SELECT statement is multi-threaded or can have a parallel plan.
As consultas em uma tabela com otimização de memória são executadas no modo single-thread.Queries on a memory-optimized table execute single-threaded. As consultas em uma tabela com otimização de memória agora podem ter planos paralelos.Queries on a memory-optimized table can now have parallel plans.
Introdução do avaliador de Cardinalidade do SQL 2014 CardinalityEstimationModelVersion="120"Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" Outras melhorias de CE (estimativa de cardinalidade) com o Modelo de Estimativa de Cardinalidade 130 que está visível em um Plano de consulta.Further cardinality estimation (CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion="130"CardinalityEstimationModelVersion="130"
Alterações do modo de lote versus modo de linha com índices columnstore:Batch mode versus Row Mode changes with Columnstore indexes:
  • As classificações em uma tabela com índice Columnstore estão no modo de LinhaSorts on a table with Columnstore index are in Row mode
  • As agregações de função em janela operam no modo de linha, como LAG ou LEADWindowing function aggregates operate in row mode such as LAG or LEAD
  • Consultas em tabelas Columnstore com várias cláusulas distintas operadas no modo de LinhaQueries on Columnstore tables with Multiple distinct clauses operated in Row mode
  • Consultas em execução em MAXDOP 1 ou com um plano serial executadas no modo de LinhaQueries running under MAXDOP 1 or with a serial plan executed in Row mode
Alterações do modo de lote versus modo de linha com índices columnstore:Batch mode versus Row Mode changes with Columnstore indexes:
  • As classificações em uma tabela com um índice Columnstore agora estão no modo de loteSorts on a table with a Columnstore index are now in batch mode
  • As agregações em janela agora funcionam no modo de lote, como LAG ou LEADWindowing aggregates now operate in batch mode such as LAG or LEAD
  • Consultas em tabelas Columnstore com várias cláusulas distintas operadas no modo de LoteQueries on Columnstore tables with Multiple distinct clauses operate in Batch mode
  • As consultas em execução em MAXDOP 1 ou com um plano serial são executadas no Modo de loteQueries running under MAXDOP 1 or with a serial plan execute in Batch Mode
As estatísticas podem ser atualizadas automaticamente.Statistics can be automatically updated. A lógica que atualiza automaticamente as estatísticas é mais agressiva em tabelas grandes.The logic which automatically updates statistics is more aggressive on large tables. Na prática, isso deve reduzir casos em que os clientes observaram problemas de desempenho de consultas nas quais as linhas recém-inseridas são consultadas com frequência, mas nas quais as estatísticas não foram atualizadas para incluir esses valores.In practice, this should reduce cases where customers have seen performance issues on queries where newly inserted rows are queried frequently but where the statistics had not been updated to include those values.
O rastreamento 2371 é OFF por padrão no SQL Server 2014 (12.x)SQL Server 2014 (12.x).Trace 2371 is OFF by default in SQL Server 2014 (12.x)SQL Server 2014 (12.x). O Rastreamento 2371 é ON por padrão no SQL Server 2016 (13.x)SQL Server 2016 (13.x).Trace 2371 is ON by default in SQL Server 2016 (13.x)SQL Server 2016 (13.x). O sinalizador de rastreamento 2371 instrui o atualizador automático de estatísticas a coletar uma amostra de um subconjunto menor, porém, mais inteligente, de linhas em uma tabela que tem um grande número de linhas.Trace flag 2371 tells the auto statistics updater to sample a smaller yet wiser subset of rows, in a table that has a great many rows.

Uma melhoria é incluir na amostra mais linhas que foram inseridas recentemente.One improvement is to include in the sample more rows that were inserted recently.

Outra melhoria é permitir que as consultas sejam executadas enquanto o processo de atualização de estatísticas está em execução, em vez de bloquear a consulta.Another improvement is to let queries run while the update statistics process is running, rather than blocking the query.
Para o nível 120, são coletadas amostras das estatísticas por um processo single-thread.For level 120, statistics are sampled by a single-threaded process. Para o nível 130, são coletadas amostras das estatísticas por um processo de vários threads.For level 130, statistics are sampled by a multi-threaded process.
253 chaves estrangeiras de entrada é o limite.253 incoming foreign keys is the limit. Uma tabela especificada pode ser referenciada por até 10.000 chaves estrangeiras de entrada ou referências semelhantes.A given table can be referenced by up to 10,000 incoming foreign keys or similar references. Para restrições, consulte Create Foreign Key Relationships.For restrictions, see Create Foreign Key Relationships.
Os algoritmos de hash MD2, MD4, MD5, SHA e SHA1 preteridos são permitidos.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. Apenas os algoritmos de hash SHA2_256 e SHA2_512 são permitidos.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
O SQL Server 2016 (13.x)SQL Server 2016 (13.x) inclui melhorias em algumas conversões de tipos de dados e outras operações (normalmente incomuns).SQL Server 2016 (13.x)SQL Server 2016 (13.x) includes improvements in some data types conversions and some (mostly uncommon) operations. Para obter detalhes, consulte Melhorias do SQL Server 2016 no tratamento de alguns tipos de dados e operações incomuns.For details see SQL Server 2016 improvements in handling some data types and uncommon operations.
A função STRING_SPLIT não está disponível.The STRING_SPLIT function is not available. A função STRING_SPLIT está disponível somente no nível de compatibilidade 130 ou superior.The STRING_SPLIT function is available under compatibility level 130 or above. Se o nível de compatibilidade do banco de dados for inferior a 130, o SQL ServerSQL Server não poderá localizar nem executar a função STRING_SPLIT.If your database compatibility level is lower than 130, SQL ServerSQL Server will not be able to find and execute STRING_SPLIT function.

As correções que estavam sob o sinalizador de rastreamento 4199 em versões anteriores do SQL ServerSQL Server anteriores ao SQL Server 2016 (13.x)SQL Server 2016 (13.x) agora estão habilitadas por padrão.Fixes that were under trace flag 4199 in earlier versions of SQL ServerSQL Server prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) are now enabled by default. Com o modo de compatibilidade 130.With compatibility mode 130. O sinalizador de rastreamento 4199 ainda será aplicável para novas correções do otimizador de consulta que são liberadas após SQL Server 2016 (13.x)SQL Server 2016 (13.x).Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2016 (13.x)SQL Server 2016 (13.x). Para usar o otimizador de consulta mais antigo no Banco de Dados SQLSQL Database, é necessário selecionar o nível de compatibilidade 110.To use the older query optimizer in Banco de Dados SQLSQL Database you must select compatibility level 110. Para obter informações sobre o Sinalizador de Rastreamento 4199, consulte Sinalizador de rastreamento 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Diferenças entre níveis de compatibilidade inferiores e o nível 120Differences Between Lower Compatibility Levels and Level 120

Esta seção descreve os novos comportamentos apresentados com o nível de compatibilidade 120.This section describes new behaviors introduced with compatibility level 120.

Configuração de nível de compatibilidade 110 ou inferiorCompatibility-level setting of 110 or lower Configuração de nível de compatibilidade 120Compatibility-level setting of 120
O otimizador de consulta mais antigo é usado.The older query optimizer is used. O SQL Server 2014 (12.x)SQL Server 2014 (12.x) inclui melhorias significativas no componente que cria e otimiza planos de consulta.SQL Server 2014 (12.x)SQL Server 2014 (12.x) includes substantial improvements to the component that creates and optimizes query plans. Esse novo recurso do otimizador de consulta depende do uso do nível de compatibilidade de banco de dados 120.This new query optimizer feature is dependent upon use of the database compatibility level 120. Novos aplicativos de banco de dados devem ser desenvolvidos usando o nível de compatibilidade de banco de dados 120 para tirar proveito dessas melhorias.New database applications should be developed using database compatibility level 120 to take advantage of these improvements. Os aplicativos migrados de versões anteriores do SQL ServerSQL Server devem ser cuidadosamente testados para confirmar que o bom desempenho será mantido ou melhorado.Applications that are migrated from earlier versions of SQL ServerSQL Server should be carefully tested to confirm that good performance is maintained or improved. Se o desempenho diminuir, você poderá definir o nível de compatibilidade de banco de dados como 110 ou menos, a fim de usar a metodologia de otimizador de consulta mais antiga.If performance degrades, you can set the database compatibility level to 110 or earlier to use the older query optimizer methodology.

A compatibilidade do banco de dados nível 120 usa um novo avaliador de cardinalidade que é ajustado para moderno data warehouse e cargas de trabalho OLTP.Database compatibility level 120 uses a new cardinality estimator that is tuned for modern data warehousing and OLTP workloads. Antes de definir o nível de compatibilidade do banco de dados como 110 devido a problemas de desempenho, consulte as recomendações na seção Planos de consulta do tópico SQL Server 2014 (12.x)SQL Server 2014 (12.x)Novidades do Mecanismo de Banco de Dados.Before setting database compatibility level to 110 because of performance issues, see the recommendations in the Query Plans section of the SQL Server 2014 (12.x)SQL Server 2014 (12.x) What's New in Database Engine topic.
Em níveis de compatibilidade abaixo de 120, a configuração de idioma é ignorada durante a conversão de um valor de date em um valor de cadeia de caracteres.In compatibility levels lower than 120, the language setting is ignored when converting a date value to a string value. Observe que esse comportamento é específico apenas ao tipo date.Note that this behavior is specific only to the date type. Veja o exemplo B na seção Exemplos abaixo.See example B in the Examples section below. A configuração de idioma não é ignorada durante a conversão de um valor de date em um valor de cadeia de caracteres.The language setting is not ignored when converting a date value to a string value.
As referências recursivas no lado direito de uma cláusula EXCEPT criam um loop infinito.Recursive references on the right-hand side of an EXCEPT clause create an infinite loop. O exemplo C na seção Exemplos abaixo demonstra esse comportamento.Example C in the Examples section below demonstrates this behavior. As referências recursivas em uma cláusula EXCEPT geram um erro em conformidade com o padrão ANSI SQL.Recursive references in an EXCEPT clause generates an error in compliance with the ANSI SQL standard.
A CTE (expressão de tabela comum) recursiva permite nomes de coluna duplicados.Recursive common table expression (CTE) allows duplicate column names. Uma CTE recursiva não permite nomes de coluna duplicados.Recursive CTE does not allow duplicate column names.
Os gatilhos desabilitados serão habilitados se os gatilhos forem alterados.Disabled triggers are enabled if the triggers are altered. A alteração de um gatilho não altera o estado (habilitado ou desabilitado) do gatilho.Altering a trigger does not change the state (enabled or disabled) of the trigger.
A cláusula de tabela OUTPUT INTO ignora o IDENTITY_INSERT SETTING = OFF e permite a inserção de valores explícitos.The OUTPUT INTO table clause ignores the IDENTITY_INSERT SETTING = OFF and allows explicit values to be inserted. Não é possível inserir valores explícitos para uma coluna de identidade em uma tabela quando IDENTITY_INSERT é definido como OFF.You cannot insert explicit values for an identity column in a table when IDENTITY_INSERT is set to OFF.
Quando a contenção do banco de dados é definida como parcial, a validação do campo $action na cláusula OUTPUT de uma instrução MERGE pode retornar um erro de ordenação.When the database containment is set to partial, validating the $action field in the OUTPUT clause of a MERGE statement can return a collation error. A ordenação dos valores retornados pela cláusula $action de uma instrução MERGE é a ordenação de banco de dados, em vez da ordenação do servidor, e um erro de conflito de ordenação não é retornado.The collation of the values returned by the $action clause of a MERGE statement is the database collation instead of the server collation and a collation conflict error is not returned.
Uma instrução SELECT INTO sempre criará uma operação de inserção de thread único.A SELECT INTO statement always creates a single-threaded insert operation. Uma instrução SELECT INTO pode criar uma operação de inserção paralela.A SELECT INTO statement can create a parallel insert operation. Ao inserir um grande número de linhas, a operação paralela pode melhorar o desempenho.When inserting a large number of rows, the parallel operation can improve performance.

Diferenças entre níveis de compatibilidade inferiores e os níveis 100 e 110Differences Between Lower Compatibility Levels and Levels 100 and 110

Esta seção descreve os novos comportamentos apresentados com o nível de compatibilidade 110.This section describes new behaviors introduced with compatibility level 110. Esta seção também se aplica aos níveis de compatibilidade acima de 110.This section also applies to compatibility levels above 110.

Configuração de nível de compatibilidade 100 ou inferiorCompatibility-level setting of 100 or lower Configuração de nível de compatibilidade 110, no mínimoCompatibility-level setting of at least 110
São executados objetos de banco de dados de CLR (Common Language Runtime) com a versão 4 do CLR.Common language runtime (CLR) database objects are executed with version 4 of the CLR. Porém, são evitadas algumas alterações de comportamento apresentadas na versão 4 do CLR.However, some behavior changes introduced in version 4 of the CLR are avoided. Para obter mais informações, consulte Novidades da integração CLR.For more information, see What's New in CLR Integration. São executados objetos de banco de dados de CLR com a versão 4 do CLR.CLR database objects are executed with version 4 of the CLR.
As funções XQuery string-length e substring contam cada par alternativo como dois caracteres.The XQuery functions string-length and substring count each surrogate as two characters. As funções XQuery string-length e substring contam cada par alternativo como um caractere.The XQuery functions string-length and substring count each surrogate as one character.
PIVOT é permitido em uma consulta CTE (expressão de tabela comum) recursiva.PIVOT is allowed in a recursive common table expression (CTE) query. No entanto, a consulta retorna resultados incorretos quando há várias linhas por agrupamento.However, the query returns incorrect results when there are multiple rows per grouping. PIVOT não é permitido em uma consulta CTE (expressão de tabela comum) recursiva.PIVOT is not allowed in a recursive common table expression (CTE) query. Um erro é retornado.An error is returned.
O algoritmo RC4 tem suporte somente para compatibilidade com versões anteriores.The RC4 algorithm is only supported for backward compatibility. O novo material só pode ser criptografado por meio do algoritmo RC4 ou RC4_128 quando o banco de dados está no nível de compatibilidade 90 ou 100.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Não recomendável.) No SQL Server 2012 (11.x)SQL Server 2012 (11.x), o material criptografado por meio do algoritmo RC4 ou RC4_128 pode ser descriptografado em qualquer nível de compatibilidade.(Not recommended.) In SQL Server 2012 (11.x)SQL Server 2012 (11.x), material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level. Novo material não pode ser criptografado com RC4 ou RC4_128.New material cannot be encrypted using RC4 or RC4_128. Use um algoritmo mais recente; por exemplo, um dos algoritmos AES.Use a newer algorithm such as one of the AES algorithms instead. No SQL Server 2012 (11.x)SQL Server 2012 (11.x), o material criptografado por meio do algoritmo RC4 ou RC4_128 pode ser descriptografado em qualquer nível de compatibilidade.In SQL Server 2012 (11.x)SQL Server 2012 (11.x), material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level.
O estilo padrão de operações CAST e CONVERT nos tipos de dados time e datetime2 é 121, exceto quando um dos tipos é usado em uma expressão de coluna computada.The default style for CAST and CONVERT operations on time and datetime2 data types is 121 except when either type is used in a computed column expression. Para colunas computadas, o estilo padrão é 0.For computed columns, the default style is 0. Esse comportamento afeta as colunas computadas quando são criadas, usadas em consultas que envolvam parametrização automática ou usadas em definições de restrição.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

O exemplo D na seção Exemplos abaixo mostra a diferença entre os estilos 0 e 121.Example D in the Examples section below shows the difference between styles 0 and 121. Não demonstra o comportamento descrito acima.It does not demonstrate the behavior described above. Para obter mais informações sobre estilos de data e hora, consulte CAST e CONVERT.For more information about date and time styles, see CAST and CONVERT.
No nível de compatibilidade 110, o estilo padrão das operações CAST e CONVERT nos tipos de dados time e datetime2 é sempre 121.Under compatibility level 110, the default style for CAST and CONVERT operations on time and datetime2 data types is always 121. Se a sua consulta depender do comportamento antigo, use um nível de compatibilidade inferior a 110 ou especifique explicitamente o estilo 0 na consulta afetada.If your query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

A atualização do banco de dados para o nível de compatibilidade 110 não alterará os dados de usuário que foram armazenados em disco.Upgrading the database to compatibility level 110 will not change user data that has been stored to disk. Você deve corrigir esses dados manualmente conforme apropriado.You must manually correct this data as appropriate. Por exemplo, se você usou SELECT INTO para criar uma tabela com base em uma fonte que continha uma expressão de coluna computada descrita acima, os dados (usando o estilo 0) serão armazenados, em vez da própria definição de coluna computada.For example, if you used SELECT INTO to create a table from a source that contained a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. Você precisará atualizar manualmente esses dados para que coincidam com o estilo 121.You would need to manually update this data to match style 121.
As colunas em tabelas remotas do tipo smalldatetime referenciadas em uma exibição particionada são mapeadas como datetime.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime. As colunas correspondentes em tabelas locais (na mesma posição ordinal na lista de seleção) devem ser do tipo datetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type datetime. As colunas em tabelas remotas do tipo smalldatetime referenciadas em uma exibição particionada são mapeadas como smalldatetime.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. As colunas correspondentes em tabelas locais (na mesma posição ordinal na lista de seleção) devem ser do tipo smalldatetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type smalldatetime.

Depois de atualizar para 110, a exibição particionada distribuída falhará devido à incompatibilidade de tipo de dados.After upgrading to 110, the distributed partitioned view will fail because of the data type mismatch. Resolva isso alterando o tipo de dados na tabela remota para datetime ou definindo o nível de compatibilidade do banco de dados local como 100 ou inferior.You can resolve this by changing the data type on the remote table to datetime or setting the compatibility level of the local database to 100 or lower.
A função SOUNDEX implementa as seguintes regras:SOUNDEX function implements the following rules:

1) Um H ou W maiúsculo é ignorado durante a separação de duas consoantes que têm o mesmo número no código SOUNDEX.1) Upper-case H or upper-case W are ignored when separating two consonants that have the same number in the SOUNDEX code.

2) Se os primeiros dois caracteres de character_expression tiverem o mesmo número no código SOUNDEX, ambos os caracteres serão incluídos.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. Caso contrário, se um conjunto de consoantes lado a lado tiver o mesmo número no código SOUNDEX, todas as consoantes serão excluídas, exceto a primeira.Else, if a set of side-by-side consonants have the same number in the SOUNDEX code, all of them are excluded except the first.
A função SOUNDEX implementa as seguintes regras:SOUNDEX function implements the following rules:

1) Se um H ou W maiúsculo separar duas consoantes que têm o mesmo número no código SOUNDEX, a consoante à direita será ignorada1) If upper-case H or upper-case W separate two consonants that have the same number in the SOUNDEX code, the consonant to the right is ignored

2) Se um conjunto de consoantes lado a lado tiver o mesmo número no código SOUNDEX, todas as consoantes serão excluídas, exceto a primeira.2) If a set of side-by-side consonants have the same number in the SOUNDEX code, all of them are excluded except the first.



As regras adicionais podem fazer com que os valores calculados pela função SOUNDEX sejam diferentes dos valores calculados em níveis de compatibilidade anteriores.The additional rules may cause the values computed by the SOUNDEX function to be different than the values computed under earlier compatibility levels. Após a atualização para o nível de compatibilidade 110, talvez seja necessário recriar os índices, os heaps ou as restrições CHECK que usam a função SOUNDEX.After upgrading to compatibility level 110, you may need to rebuild the indexes, heaps, or CHECK constraints that use the SOUNDEX function. Para obter mais informações, consulte SOUNDEX.For more information, see SOUNDEX.

Diferenças entre os níveis de compatibilidade 90 e 100Differences Between Compatibility Level 90 and Level 100

Esta seção descreve os novos comportamentos apresentados com o nível de compatibilidade 100.This section describes new behaviors introduced with compatibility level 100.

Configuração de nível de compatibilidade 90Compatibility-level setting of 90 Configuração de nível de compatibilidade 100Compatibility-level setting of 100 Possibilidade de impactoPossibility of impact
A configuração QUOTED_IDENTIFER sempre é definida como ON para funções com valor de tabela de várias instruções ao serem criadas, sem considerar a configuração do nível de sessão.The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting. A configuração de sessão QUOTED IDENTIFIER é atendida quando funções com valor de tabela de várias instruções são criadas.The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created. MédioMedium
Ao criar ou alterar uma função de partição, os literais datetime e smalldatetime na função são avaliados, considerando US_English como a configuração de idioma.When you create or alter a partition function, datetime and smalldatetime literals in the function are evaluated assuming US_English as the language setting. A configuração atual de idioma é usada para avaliar datetime e literais de smalldatetime na função de partição.The current language setting is used to evaluate datetime and smalldatetime literals in the partition function. MédioMedium
A cláusula FOR BROWSE é permitida (e ignorada) em instruções INSERT e SELECT INTO.The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements. A cláusula FOR BROWSE não é permitida em instruções INSERT e SELECT INTO.The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements. MédioMedium
Predicados de texto completo são permitidos na cláusula OUTPUT.Full-text predicates are allowed in the OUTPUT clause. Predicados de texto completo não são permitidos na cláusula OUTPUT.Full-text predicates are not allowed in the OUTPUT clause. BaixoLow
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST e DROP FULLTEXT STOPLIST não são compatíveis.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. A lista de palavras irrelevantes do sistema é associada automaticamente a novos índices de texto completo.The system stoplist is automatically associated with new full-text indexes. CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST e DROP FULLTEXT STOPLIST são compatíveis.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. BaixoLow
MERGE não é imposto como uma palavra-chave reservada.MERGE is not enforced as a reserved keyword. MERGE é uma palavra-chave completamente reservada.MERGE is a fully reserved keyword. A instrução MERGE é compatível com os níveis de compatibilidade 100 e 90.The MERGE statement is supported under both 100 and 90 compatibility levels. BaixoLow
O uso do argumento <dml_table_source> da instrução INSERT gera um erro de sintaxe.Using the <dml_table_source> argument of the INSERT statement raises a syntax error. Além disso, você pode capturar os resultados de uma cláusula OUTPUT em uma instrução INSERT, UPDATE, DELETE ou MERGE aninhada e inserir esses resultados em uma tabela ou exibição de destino.You can capture the results of an OUTPUT clause in a nested INSERT, UPDATE, DELETE, or MERGE statement, and insert those results into a target table or view. Isto é feito com o argumento <dml_table_source> da instrução INSERT.This is done using the <dml_table_source> argument of the INSERT statement. BaixoLow
A menos que NOINDEX seja especificado, DBCC CHECKDB ou DBCC CHECKTABLE executará verificações de consistência física e lógica em uma única tabela ou exibição indexada e em todos os seus índices não clusterizados e XML.Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table or indexed view and on all its nonclustered and XML indexes. Não há suporte para índices espaciais.Spatial indexes are not supported. A menos que NOINDEX seja especificado, DBCC CHECKDB ou DBCC CHECKTABLE executará verificações de consistência física e lógica em uma única tabela e em todos os seus índices não clusterizados.Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table and on all its nonclustered indexes. Entretanto, em índices XML, índices espaciais e exibições indexadas, por padrão são executadas somente as verificações de consistência física.However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.

Se WITH EXTENDED_LOGICAL_CHECKS for especificado, verificações lógicas serão executadas em exibições indexadas, índices XML e índices espaciais, quando presentes.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. Por padrão, as verificações de consistência física são executadas antes das verificações de consistência lógica.By default, physical consistency checks are performed before the logical consistency checks. Se NOINDEX também estiver especificado, apenas as verificações lógicas serão executadas.If NOINDEX is also specified, only the logical checks are performed.
BaixoLow
Quando uma cláusula OUTPUT é usada com uma instrução DML que causa um erro de tempo de execução durante sua execução, a transação inteira é encerrada e revertida.When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the entire transaction is terminated and rolled back. Quando uma cláusula OUTPUT é usada com uma instrução DML (linguagem de manipulação de dados) e ocorre um erro em tempo de execução durante sua execução, o comportamento depende da configuração de SET XACT_ABORT.When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the behavior depends on the SET XACT_ABORT setting. Se SET XACT_ABORT for OFF, um erro de anulação de instrução gerado pela instrução DML que usa a cláusula OUTPUT terminará a instrução, mas a execução do lote continuará e a transação não será revertida.If SET XACT_ABORT is OFF, a statement abort error generated by the DML statement using the OUTPUT clause will terminate the statement, but the execution of the batch continues and the transaction is not rolled back. Se SET XACT_ABORT for ON, todos os erros em tempo de execução gerados pela instrução DML que usam a cláusula OUTPUT terminarão o lote e a transação será revertida.If SET XACT_ABORT is ON, all run-time errors generated by the DML statement using the OUTPUT clause will terminate the batch, and the transaction is rolled back. BaixoLow
CUBE e ROLLUP não são impostos como palavras-chave reservadas.CUBE and ROLLUP are not enforced as reserved keywords. CUBE e ROLLUP são palavras-chave reservadas dentro da cláusula GROUP BY.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. BaixoLow
A validação restrita é aplicada a elementos do tipo anyType XML.Strict validation is applied to elements of the XML anyType type. A validação incerta é aplicada a elementos do tipo anyType.Lax validation is applied to elements of the anyType type. Para obter mais informações, consulte Componentes curinga e validação de conteúdo.For more information, see Wildcard Components and Content Validation. BaixoLow
Não é possível consultar ou modificar os atributos especiais xsi:nil e xsi:type por instruções de linguagem de manipulação de dados.The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.

Isso significa que /e/@xsi:nil falha, enquanto /e/@* ignora os atributos xsi:nil e xsi:type.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. No entanto, /e retorna os atributos xsi:nil e xsi:type para manter a consistência com SELECT xmlCol, mesmo se xsi:nil = "false".However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
Os atributos especiais xsi:nil e xsi:type são armazenados como atributos normais e podem ser consultados e modificados.The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.

Por exemplo, a execução da consulta SELECT x.query('a/b/@*') retorna todos os atributos, incluindo xsi:nil e xsi:type.For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. Para excluir estes tipos da consulta, substitua @* por @*[namespace-uri(.) != "insert xsi namespace uri" e não (local-name(.) = "type" nem local-name(.) ="nil".To exclude these types in the query, replace @* with @*[namespace-uri(.) != "insert xsi namespace uri" and not (local-name(.) = "type" or local-name(.) ="nil".
BaixoLow
Uma função definida pelo usuário que converte um valor constante da cadeia de caracteres XML para um tipo de datetime do SQL ServerSQL Server é marcada como determinista.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as deterministic. Uma função definida pelo usuário que converte um valor constante de cadeia de caracteres XML em um tipo datetime do SQL ServerSQL Server é marcado como não determinista.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as non-deterministic. BaixoLow
Os tipos de listas e união de XML não são totalmente suportados.The XML union and list types are not fully supported. Os tipos de lista e união são totalmente suportados, inclusive as seguintes funcionalidades:The union and list types are fully supported including the following functionality:

União de listaUnion of list

União de uniãoUnion of union

Lista de tipos atômicosList of atomic types

Lista de uniãoList of union
BaixoLow
As opções SET requeridas para um método xQuery não são validadas quando o método é contido em uma exibição ou função com valor de tabela embutida.The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function. As opções SET requeridas para um método xQuery são validadas quando o método é contido em uma exibição ou função com valor de tabela embutida.The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. Um erro ocorrerá se as opções SET do método forem definidas incorretamente.An error is raised if the SET options of the method are set incorrectly. BaixoLow
Os valores do atributo XML que contém caracteres de final de linha (retorno de carro e alimentação de linha) não são normalizados de acordo com o padrão XML.XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. Isto é, ambos os caracteres são retornados, em vez de um único caractere de alimentação de linha.That is, both characters are returned instead of a single line-feed character. Os valores do atributo XML que contém caracteres de final de linha (retorno de carro e alimentação de linha) são normalizados de acordo com o padrão XML.XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. Isto é, todas as quebras de linha em entidades externas de análise (incluindo a entidade do documento) são normalizadas na entrada pela tradução da sequência de dois caracteres #xD #xA e de qualquer #xD que não seja seguido por #xA em um único caractere #xA.That is, all line breaks in external parsed entities (including the document entity) are normalized on input by translating both the two-character sequence #xD #xA and any #xD that is not followed by #xA to a single #xA character.

Aplicativos que usam atributos para transportar valores da cadeia de caracteres que contêm caracteres de final de linha não receberão de volta estes caracteres, já que eles foram submetidos.Applications that use attributes to transport string values that contain end-of-line characters will not receive these characters back as they are submitted. Para evitar o processo de normalização, use as entidades de caractere numérico XML para codificar todos os caracteres de final de linha.To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
BaixoLow
As propriedades ROWGUIDCOL e IDENTITY da coluna podem ser nomeadas incorretamente como uma restrição.The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. Por exemplo, a instrução CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) executa, mas o nome da restrição não é preservado e não fica acessível ao usuário.For example the statement CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) executes, but the constraint name is not preserved and is not accessible to the user. As propriedades ROWGUIDCOL e IDENTITY da coluna não podem ser nomeadas como uma restrição.The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. O erro 156 é retornado.Error 156 is returned. BaixoLow
A atualização de colunas usando atribuição bidirecional, como UPDATE T1 SET @v = column_name = <expression>, pode produzir resultados inesperados porque o valor de tempo de vida da variável pode ser usado em outras cláusulas, como nas cláusulas WHERE e ON, durante a execução da instrução, em vez do valor inicial da instrução.Updating columns by using a two-way assignment such as UPDATE T1 SET @v = column_name = <expression> can produce unexpected results because the live value of the variable can be used in other clauses such as the WHERE and ON clause during statement execution instead of the statement starting value. Isto pode causar a alteração imprevisível dos significados dos predicados em uma base por linha.This can cause the meanings of the predicates to change unpredictably on a per-row basis.

Este comportamento só é aplicável quando o nível de compatibilidade é definido em 90.This behavior is applicable only when the compatibility level is set to 90.
A atualização de colunas usando uma atribuição bidirecional gera resultados esperados porque só o valor inicial da instrução é acessado durante a execução da instrução.Updating columns by using a two-way assignment produces expected results because only the statement starting value of the column is accessed during statement execution. BaixoLow
Veja o exemplo E na seção Exemplos abaixo.See example E in the Examples section below. Veja o exemplo F na seção Exemplos abaixo.See example F in the Examples section below. BaixoLow
A função ODBC {fn CONVERT()} usa o formato de data padrão do idioma.The ODBC function {fn CONVERT()} uses the default date format of the language. Em alguns idiomas, o formato padrão é YDM, o que pode resultar em erros de conversão quando CONVERT() é combinado com outras funções, como {fn CURDATE()}, que espera um formato YMD.For some languages, the default format is YDM, which can result in conversion errors when CONVERT() is combined with other functions, such as {fn CURDATE()}, that expect a YMD format. A função ODBC {fn CONVERT()} usa o estilo 121 (um formato YMD independente de linguagem) ao converter os tipos de dados ODBC SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME e SQL_TYPE_TIMESTAMP.The ODBC function {fn CONVERT()} uses style 121 (a language-independent YMD format) when converting to the ODBC data types SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME, and SQL_TYPE_TIMESTAMP. BaixoLow
Datetime intrínseco, como DATEPART, não exige que os valores de entrada de cadeia de caracteres sejam literais válidas de datetime.Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. Por exemplo, SELECT DATEPART (year, '2007/05-30') é compilado com êxito.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. Partes intrínsecas de datetime, como DATEPART, exigem que os valores de entrada de cadeia de caracteres sejam literais de datetime válidos.Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. Erro 241 é retornado quando um datetime literal inválido é usado.Error 241 is returned when an invalid datetime literal is used. BaixoLow

Palavras-chave reservadasReserved Keywords

A configuração de compatibilidade também determina as palavras-chave que são reservadas pelo Mecanismo de Banco de DadosDatabase Engine.The compatibility setting also determines the keywords that are reserved by the Mecanismo de Banco de DadosDatabase Engine. A tabela a seguir mostra as palavras-chave reservadas que são introduzidas em cada nível de compatibilidade.The following table shows the reserved keywords that are introduced by each of the compatibility levels.

Configuração de nível de compatibilidadeCompatibility-level setting Palavras-chave reservadasReserved keywords
130130 A ser determinado.To be determined.
120120 Nenhum.None.
110110 WITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLEWITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLE
100100 CUBE, MERGE, ROLLUPCUBE, MERGE, ROLLUP
9090 EXTERNAL, PIVOT, UNPIVOT, REVERT, TABLESAMPLEEXTERNAL, PIVOT, UNPIVOT, REVERT, TABLESAMPLE

Em um determinado nível de compatibilidade, as palavras-chave reservadas incluem todas as palavras-chave introduzidas naquele nível ou abaixo dele.At a given compatibility level, the reserved keywords include all of the keywords introduced at or below that level. Por exemplo, para aplicativos no nível 110, todas as palavras-chave listadas na tabela anterior são reservadas.Thus, for instance, for applications at level 110, all of the keywords listed in the preceding table are reserved. Nos níveis de compatibilidade inferiores, as palavras-chave de nível 100 permanecem nomes de objeto válidos, mas os recursos de idioma de nível 110 correspondentes a essas palavras-chave não estão disponíveis.At the lower compatibility levels, level-100 keywords remain valid object names, but the level-110 language features corresponding to those keywords are unavailable.

Uma vez introduzida, uma palavra-chave permanece reservada.Once introduced, a keyword remains reserved. Por exemplo, a palavra-chave reservada PIVOT, que foi incorporada no nível de compatibilidade 90, também é reservada nos níveis 100, 110 e 120.For example, the reserved keyword PIVOT, which was introduced in compatibility level 90, is also reserved in levels 100, 110, and 120.

Se um aplicativo usar um identificador que é reservado como uma palavra-chave no seu nível de compatibilidade, o aplicativo falhará.If an application uses an identifier that is reserved as a keyword for its compatibility level, the application will fail. Para solucionar esse problema, inclua o identificador entre colchetes ( [] ) ou aspas ( "" ); por exemplo, para atualizar um aplicativo que usa o identificador EXTERNAL com o nível de compatibilidade 90, você pode alterar o identificador para [EXTERNAL] ou "EXTERNAL" .To work around this, enclose the identifier between either brackets ([]) or quotation marks (""); for example, to upgrade an application that uses the identifier EXTERNAL to compatibility level 90, you could change the identifier to either [EXTERNAL] or "EXTERNAL".

Para obter mais informações, consulte Palavras-chave reservadas.For more information, see Reserved Keywords.

PermissõesPermissions

Requer a permissão ALTER no banco de dados.Requires ALTER permission on the database.

ExemplosExamples

A.A. Alterando o nível de compatibilidadeChanging the compatibility level

O exemplo a seguir altera o nível de compatibilidade do banco de dados AdventureWorks2012AdventureWorks2012 para 110,SQL Server 2012 (11.x)SQL Server 2012 (11.x).The following example changes the compatibility level of the AdventureWorks2012AdventureWorks2012 database to 110,SQL Server 2012 (11.x)SQL Server 2012 (11.x).

ALTER DATABASE AdventureWorks2012
SET COMPATIBILITY_LEVEL = 110;
GO

O exemplo a seguir retorna o nível de compatibilidade do banco de dados atual.The following example returns the compatibility level of the current database.

SELECT name, compatibility_level
FROM sys.databases
WHERE name = db_name();

B.B. Ignorando a instrução SET LANGUAGE, exceto no nível de compatibilidade 120Ignoring the SET LANGUAGE statement except under compatibility level 120

A consulta a seguir ignora a instrução SET LANGUAGE, exceto no nível de compatibilidade 120.The following query ignores the SET LANGUAGE statement except under compatibility level 120.

SET DATEFORMAT dmy;
DECLARE @t2 date = '12/5/2011' ;
SET LANGUAGE dutch;
SELECT CONVERT(varchar(11), @t2, 106);

-- Results when the compatibility level is less than 120.
12 May 2011

-- Results when the compatibility level is set to 120).
12 mei 2011

C.C. Para a configuração do nível de compatibilidade 110 ou inferior, as referências recursivas no lado direito de uma cláusula EXCEPT criam um loop infinitoFor compatibility-level setting of 110 or lower, recursive references on the right-hand side of an EXCEPT clause create an infinite loop

WITH
cte AS (SELECT * FROM (VALUES (1),(2),(3)) v (a)),
r
AS (SELECT a FROM Table1
UNION ALL
(SELECT a FROM Table1 EXCEPT SELECT a FROM r) )
SELECT a
FROM r;

D.D. A diferença entre os estilos 0 e 121The difference between styles 0 and 121

Para obter mais informações sobre estilos de data e hora, consulte CAST e CONVERT.For more information about date and time styles, see CAST and CONVERT.

CREATE TABLE t1 (c1 time(7), c2 datetime2);

INSERT t1 (c1,c2) VALUES (GETDATE(), GETDATE());

SELECT CONVERT(nvarchar(16),c1,0) AS TimeStyle0
       ,CONVERT(nvarchar(16),c1,121)AS TimeStyle121
       ,CONVERT(nvarchar(32),c2,0) AS Datetime2Style0
       ,CONVERT(nvarchar(32),c2,121)AS Datetime2Style121
FROM t1;

-- Returns values such as the following.
TimeStyle0       TimeStyle121
Datetime2Style0      Datetime2Style121
---------------- ----------------
-------------------- --------------------------
3:15PM           15:15:35.8100000
Jun  7 2011  3:15PM  2011-06-07 15:15:35.8130000

E.E. Atribuição de variável – operador UNION de nível superiorVariable assignment - top-level UNION operator

A atribuição de variável é permitida em uma instrução que contém um operador UNION de nível superior, mas retorna resultados inesperados.Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. Por exemplo, nas instruções a seguir, o valor da coluna @v da união de duas tabelas é atribuído ao BusinessEntityID da variável local.For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. Por definição, quando a instrução SELECT retorna mais de um valor, a variável é atribuída ao último valor retornado.By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. Neste caso, a variável é atribuída corretamente ao último valor, porém, o conjunto de resultados da instrução SELECT UNION também é retornado.In this case, the variable is correctly assigned the last value, however, the result set of the SELECT UNION statement is also returned.

ALTER DATABASE AdventureWorks2012
SET compatibility_level = 110;
GO
USE AdventureWorks2012;
GO
DECLARE @v int;
SELECT @v = BusinessEntityID FROM HumanResources.Employee
UNION ALL
SELECT @v = BusinessEntityID FROM HumanResources.EmployeeAddress;
SELECT @v;

A atribuição da variável não é permitida em uma instrução que contenha um operador UNION de nível superior.Variable assignment is not allowed in a statement containing a top-level UNION operator. O erro 10734 é retornado.Error 10734 is returned. Para resolver o erro, reescreva a consulta como demonstrado no exemplo a seguir.To resolve the error, rewrite the query as shown in the following example.

DECLARE @v int;
SELECT @v = BusinessEntityID FROM
    (SELECT BusinessEntityID FROM HumanResources.Employee
     UNION ALL
     SELECT BusinessEntityID FROM HumanResources.EmployeeAddress) AS Test;
SELECT @v;

Consulte TambémSee Also

Certificação de Compatibilidade Compatibility Certification
ALTER DATABASE ALTER DATABASE
Palavras-chave reservadas Reserved Keywords
CREATE DATABASE CREATE DATABASE
DATABASEPROPERTYEX DATABASEPROPERTYEX
sys.databases sys.databases
sys.database_files sys.database_files
Exibir ou alterar o nível de compatibilidade de um banco de dados View or Change the Compatibility Level of a Database
Alterar o modo de compatibilidade do banco de dados e usar o Repositório de Consultas Change the Database Compatibility Mode and use the Query Store
Atualizando bancos de dados usando o Assistente de Ajuste de ConsultaUpgrading Databases by using the Query Tuning Assistant