Nivel de compatibilidad de ALTER DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL) Compatibility Level

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2008)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Configura varios comportamientos de la base de datos de manera que sean compatibles con la versión especificada de SQL ServerSQL Server.Sets certain database behaviors to be compatible with the specified version of SQL ServerSQL Server. Para más información sobre otras opciones de ALTER DATABASE, vea ALTER DATABASE (Transact-SQL).For other ALTER DATABASE options, see ALTER DATABASE (Transact-SQL).

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

SintaxisSyntax

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

ArgumentosArguments

database_namedatabase_name
Es el nombre de la base de datos que se va a modificar.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 }
Es la versión de SQL ServerSQL Server con la que se va a hacer compatible la base de datos.Is the version of SQL ServerSQL Server with which the database is to be made compatible. Se pueden configurar los siguientes valores de nivel de compatibilidad (no todas las versiones admiten todo el nivel de compatibilidad mencionado anteriormente):The following compatibility level values can be configured (not all versions supports all of the above listed compatibility level):

ProductProduct Versión del motor de base de datosDatabase Engine Version Designación de nivel de compatibilidadCompatibility Level Designation Valores de nivel de compatibilidad admitidosSupported Compatibility Level Values
SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1414 140140 140, 130, 120, 110, 100140, 130, 120, 110, 100
Servidor lógico de Base de datos SQL de AzureAzure SQL Database Base de datos SQL de AzureAzure SQL Database logical server 1212 130130 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
Instancia administrada de Base de datos SQL de AzureAzure SQL Database Base de datos SQL de AzureAzure SQL Database Managed Instance 1212 130130 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
Resultado deSQL Server 2005 99 9090 90, 8090, 80
SQL Server 2000SQL Server 2000 88 8080 8080

Nota

En Base de datos SQL de AzureAzure SQL Database, a partir de enero de 2018, el nivel de compatibilidad predeterminado es 140 para las bases de datos recién creadas.As of January 2018, in Base de datos SQL de AzureAzure SQL Database, the default compatibility level is 140 for newly created databases. No actualizamos el nivel de compatibilidad de las bases de datos existentes.We do not update database compatibility level for existing databases. Queda a la elección de los clientes.This is up to customers to do at their own discretion. Dicho esto, recomendamos encarecidamente a los clientes que planeen pasarse al nivel de compatibilidad más reciente para que puedan aprovechar las últimas mejoras.With that said, we highly recommend customers plan on moving to the latest compatibility level in order to leverage the latest improvements.

Si quiere aprovechar el nivel de compatibilidad de base de datos 140 para su base de datos global pero tiene motivos para quedarse con el modelo de estimación de cardinalidad de SQL Server 2012 (11.x)SQL Server 2012 (11.x), asignado al nivel de compatibilidad de base de datos 110, vea ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL) y, en concreto, su palabra clave LEGACY_CARDINALITY_ESTIMATION = ON.If you want to leverage database compatibility level 140 for your database overall, but you have reason to prefer the cardinality estimation model of SQL Server 2012 (11.x)SQL Server 2012 (11.x), mapping to database compatibility level 110, see ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL), and in particular its keyword LEGACY_CARDINALITY_ESTIMATION = ON.

Para más información sobre cómo valorar las diferencias de rendimiento de las consultas más importantes entre dos niveles de compatibilidad de Base de datos SQL de AzureAzure SQL Database, vea la mejora en el rendimiento de las consultas con el nivel de compatibilidad 130 de Azure SQL Database.For details about how to assess the performance differences of your most important queries, between two compatibility levels on Base de datos SQL de AzureAzure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database. Tenga en cuenta que en este artículo se hace referencia al nivel de compatibilidad 130 y a SQL ServerSQL Server, aunque se aplica la misma metodología a los traslados al nivel de compatibilidad 140 para SQL ServerSQL Server y Base de datos SQL de AzureAzure SQL Database.Note that this article refers to compatibility level 130 and SQL ServerSQL Server, but the same methodology applies for moves to 140 for SQL ServerSQL Server and Base de datos SQL de AzureAzure SQL Database .

Ejecute la siguiente consulta para conocer la versión del Motor de base de datosDatabase Engine al que está conectado.Execute the following query to determine the version of the Motor de base de datosDatabase Engine that you are connected to.

SELECT SERVERPROPERTY('ProductVersion');  

Nota

No todas las características que varían según el nivel de compatibilidad se admiten en Base de datos SQL de AzureAzure SQL Database.Not all features that vary by compatibility level are supported on Base de datos SQL de AzureAzure SQL Database.

Para averiguar el nivel de compatibilidad actual, consulte la columna compatibility_level de sys.databases (Transact-SQL).To determine the current compatibility level, query the compatibility_level column of sys.databases (Transact-SQL).

SELECT name, compatibility_level FROM sys.databases;  

NotasRemarks

En todas las instalaciones de SQL ServerSQL Server, el nivel de compatibilidad predeterminado se establece en la versión del Motor de base de datosDatabase Engine.For all installations of SQL ServerSQL Server, the default compatibility level is set to the version of the Motor de base de datosDatabase Engine. Las bases de datos se establecen en este nivel a menos que la base de datos modelo tenga un nivel de compatibilidad inferior.Databases are set to this level unless the model database has a lower compatibility level. Cuando una base de datos se actualiza desde una versión anterior de SQL ServerSQL Server, dicha base de datos mantiene su nivel de compatibilidad si es al menos la versión mínima permitida para esa instancia de SQL ServerSQL Server.When a database is upgraded 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. Actualizar una base de datos con un nivel de compatibilidad inferior al nivel permitido hace que la base de datos se establezca automáticamente en el nivel de compatibilidad más bajo permitido.Upgrading a database with a compatibility level lower than the allowed level, automatically sets the database to the lowest compatibility level allowed. Esto se aplica a las bases de datos del usuario y del sistema.This applies to both system and user databases.

Se prevén los siguientes comportamientos para SQL Server 2017 (14.x)SQL Server 2017 (14.x) cuando se adjunta o se restaura una base de datos, así como después de una actualización local: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:

  • Si el nivel de compatibilidad de una base de datos de usuario era 100 o superior antes de la actualización, permanece igual después de la misma.If the compatibility level of a user database was 100 or higher before the upgrade, it remains the same after upgrade.
  • Si el nivel de compatibilidad de una base de datos de usuario era 90 antes de la actualización, en la base de datos actualizada el nivel de compatibilidad se establece en 100, que es el nivel de compatibilidad mínimo admitido en 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).
  • Los niveles de compatibilidad de las bases de datos tempdb, model, msdb y Resource quedan establecidos en el nivel de compatibilidad actual después de la actualización.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the current compatibility level after upgrade.
  • La base de datos del sistema maestra conserva el nivel de compatibilidad que tenía antes de la actualización.The master system database retains the compatibility level it had before upgrade.

Use ALTER DATABASE para cambiar el nivel de compatibilidad de la base de datos.Use ALTER DATABASE to change the compatibility level of the database. El nuevo nivel de compatibilidad de una base de datos se hace efectivo cuando se emite un comando USE <database> o se procesa un nuevo inicio de sesión con esa base de datos como contexto de base de datos predeterminada.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 ver el nivel de compatibilidad actual de una base de datos, consulte la columna compatibility_level en la vista de catálogo sys.databases.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

Nota

Una base de datos de distribución creada en una versión anterior de SQL ServerSQL Server y que se actualiza a SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM o Service Pack 1 tiene el nivel de compatibilidad 90, que no es compatible con otras bases de datos.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. Esto no afecta a la funcionalidad de la replicación.This does not have an impact on the functionality of replication. Si se actualiza a un service pack o a una versión posterior de SQL ServerSQL Server, el nivel de compatibilidad de la base de datos de distribución aumentará para coincidir con el de la base de datos maestra.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.

Niveles de compatibilidad y actualizaciones de SQL ServerCompatibility Levels and SQL Server Upgrades

El nivel de compatibilidad de base de datos es una valiosa herramienta que sirve para modernizar las bases de datos, ya que permite actualizar el Motor de base de datos de SQL ServerSQL Server Database Engine mientras se conserva el estado funcional de las aplicaciones conectadas manteniendo el mismo nivel de compatibilidad de base de datos previo a la actualización.Database compatibility level is a valuable tool to assist in database modernization, by allowing the Motor de base de datos de SQL ServerSQL Server Database Engine to be upgraded, while keeping connecting applications functional status by maintaining the same pre-upgrade database compatibility level. Siempre y cuando la aplicación no necesite aprovechar las mejoras que solo están disponibles en un nivel de compatibilidad de base de datos superior, es un enfoque válido para actualizar el Motor de base de datos de SQL ServerSQL Server Database Engine y mantener el nivel de compatibilidad de base de datos 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 Motor de base de datos de SQL ServerSQL Server Database Engine and maintain the previous database compatibility level. Para más información sobre el uso del nivel de compatibilidad para la compatibilidad con versiones anteriores, vea la sección Usar el nivel de compatibilidad para la compatibilidad con versiones anteriores, que aparece más adelante en este artículo.For more information on using compatibility level for backward compatibility, see the Using Compatibility Level for Backward Compatibility later in this article.

Para los nuevos trabajos de desarrollos, o en el caso de que una aplicación existente requiera el uso de características nuevas, así como las mejoras de rendimiento efectuadas en el espacio del optimizador de consultas, plantéese actualizar el nivel de compatibilidad de base de datos a la versión más reciente disponible en SQL ServerSQL Server y certifique la aplicación para que funcione con ese nivel de compatibilidad.For new development work, or when an existing application requires use of new features, as well as performance improvements done in the query optimizer space, plan to upgrade the database compatibility level to the latest available in SQL ServerSQL Server, and certify your application to work with that compatibility level. Para obtener más información detallada sobre cómo actualizar el nivel de compatibilidad de base de datos, vea Prácticas recomendadas para actualizar el nivel de compatibilidad de base de datos, que aparece más adelante en el artículo.For more details on upgrading the database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

Sugerencia

Si una aplicación se ha probado y certificado en una determinada versión de SQL ServerSQL Server, quiere decir que se ha probado y certificado implícitamente en ese nivel de compatibilidad de base de datos nativo de la versión de SQL ServerSQL Server.If an application was tested and certified on a given SQL ServerSQL Server version, then it was implicitly tested and certified on that SQL ServerSQL Server version native database compatibility level.

Por lo tanto, el nivel de compatibilidad de base de datos proporciona una ruta de acceso de certificación sencilla para una aplicación existente cuando se usa el nivel de compatibilidad de base de datos correspondiente a la versión de SQL ServerSQL Server probada.So, database compatibility level provides an easy certification path for an existing application, when using the database compatibility level corresponding to the tested SQL ServerSQL Server version.

Para más información sobre las diferencias existentes entre los niveles de compatibilidad, vea las secciones correspondientes de este artículo.For more information about differences between compatibility levels, see the appropriate sections later in this article.

Para actualizar el Motor de base de datos de SQL ServerSQL Server Database Engine a la versión más reciente manteniendo el nivel de compatibilidad de base de datos que había antes de la actualización y su estado de compatibilidad, se recomienda llevar a cabo una validación del área expuesta funcional estática del código de aplicación en la base de datos. Para ello, debe usar la herramienta Microsoft Data Migration Assistant (DMA).To upgrade the Motor de base de datos de SQL ServerSQL Server Database Engine to the latest version, while maintaining the database compatibility level that existed before the upgrade and its supportability status, it is recommended to perform static functional surface area validation of the application code in the database, by using the Microsoft Data Migration Assistant tool (DMA). La ausencia de errores en la salida de la herramienta DMA, sobre funcionalidades incompatibles o ausentes, protege la aplicación de cualquier regresión funcional en la nueva versión de destino.The absence of errors in the DMA tool output, about missing or incompatible functionality, protects application from any functional regressions on the new target version. Para obtener más información sobre la herramienta DMA, vaya aquí.For more information on the DMA tool, see here.

Nota

DMA admite el nivel de compatibilidad de base de datos 100 y posterior.DMA supports database compatibility level 100 and above. Queda excluido Resultado deSQL Server 2005 como versión de origen. Resultado deSQL Server 2005 as source version is excluded.

Importante

Microsoft recomienda que se lleven a cabo algunas pruebas mínimas para validar el éxito de una actualización, mientras se mantiene el nivel de compatibilidad de base de datos anterior.Microsoft recommends that some minimal testing is done to validate the success of an upgrade, while maintaining the previous database compatibility level. Debe determinar qué comprenderían estas pruebas mínimas para su aplicación y su escenario.You should determine what minimal testing means for your own application and scenario.

Nota

Microsoft ofrece protección de formas de los planes de consulta cuando:Microsoft provides query plan shape protection when:

  • La nueva versión de SQL ServerSQL Server (destino) se ejecuta en un hardware comparable al hardware en el que se ejecutaba la versión de SQL ServerSQL Server anterior (origen).The new SQL ServerSQL Server version (target) runs on hardware that is comparable to the hardware where the previous SQL ServerSQL Server version (source) was running.
  • Se usa el mismo nivel de compatibilidad de base de datos admitido tanto en el SQL ServerSQL Server de destino como en el SQL ServerSQL Server de origen.The same supported database compatibility level is used both at the target SQL ServerSQL Server and source SQL ServerSQL Server.

Se corregirán todas las regresiones de forma de los planes de consulta (en comparación con el SQL ServerSQL Server de origen) que se produzcan en las condiciones anteriores.Any query plan shape regression (as compared to the source SQL ServerSQL Server) that occurs in the above conditions will be addressed. Póngase en contacto con el servicio de atención al cliente de Microsoft si es el caso.Please contact Microsoft Customer Support if this is the case.

Usar el nivel de compatibilidad para la compatibilidad con versiones anterioresUsing Compatibility Level for Backward Compatibility

El valor de configuración de nivel de compatibilidad de base de datos afecta solo al comportamiento de la base de datos especificada, y no a todo el servidor.The database compatibility level setting affects behaviors only for the specified database, not for the entire server. El nivel de compatibilidad de base de datos solo proporciona compatibilidad parcial con versiones anteriores de SQL ServerSQL Server.Database compatibility level provides only partial backward compatibility with earlier versions of SQL ServerSQL Server.

Sugerencia

Como el nivel de compatibilidad de la base de datos es una configuración de nivel de base de datos, una aplicación que se ejecuta en un Motor de base de datos de SQL ServerSQL Server Database Engine más reciente mientras usa un nivel de compatibilidad de la base de datos anterior, de todos modos se pueden aprovechar las mejoras de nivel de servidor sin ningún requisito de cambio de aplicación.Because database compatibility level is a database-level setting, an application running on a newer Motor de base de datos de SQL ServerSQL Server Database Engine while using an older database compatibility level, can still leverage server-level enhancements without any requirement for application changes.

Estos incluyen una supervisión enriquecida y mejoras en la solución de problemas, con nuevas vista de administración dinámica del sistema y eventos extendidos.These include rich monitoring and troubleshooting improvements, with new System Dynamic Management Views and Extended Events. Y también mejora la escalabilidad, por ejemplo, con soft-NUMA automático.And also improved scalability, for example with Automatic Soft-NUMA .

A partir del modo de compatibilidad 130, todas las características nuevas que afectan a los planes de consulta se han agregado únicamente al nuevo nivel de compatibilidad de forma intencionada.Starting with compatibility mode 130, any new query plan affecting features have been intentionally added only to the new compatibility level. La finalidad es minimizar el riesgo durante las actualizaciones que surgen de la disminución del rendimiento debido a cambios en el plan de consulta.This has been done in order to minimize the risk during upgrades that arise from performance degradation due to query plan changes.
Desde el plano de las aplicaciones, el objetivo debería seguir siendo actualizar al nivel de compatibilidad más reciente en algún momento para heredar algunas de las nuevas características, así como las mejoras de rendimiento efectuadas en el espacio del optimizador de consultas, pero hacerlo de un modo controlado.From an application perspective, 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, as well as performance improvements done in the query optimizer space, but to do so in a controlled way. Use el nivel de compatibilidad inferior como ayuda más segura para la migración para solucionar diferencias de comportamiento entre las versiones que se controlan con el valor de nivel de compatibilidad correspondiente.Use the lower compatibility level as a safer migration aid to work around version differences, in the behaviors that are controlled by the relevant compatibility level setting. Para obtener más información detallada, así como el flujo de trabajo recomendado para actualizar el nivel de compatibilidad de base de datos, vea Prácticas recomendadas para actualizar el nivel de compatibilidad de base de datos, que aparece más adelante en el artículo.For more details, including the recommended workflow for upgrading database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

Importante

La funcionalidad descontinuada incluida en una determinada versión de SQL ServerSQL Server no está protegida por el nivel de compatibilidad.Discontinued functionality introduced in a given SQL ServerSQL Server version is not protected by compatibility level. Esto hace referencia a una funcionalidad que se quitó del Motor de base de datos de SQL ServerSQL Server Database Engine.This refers to functionality that was removed from the Motor de base de datos de SQL ServerSQL Server Database Engine.

Por ejemplo, la sugerencia FASTFIRSTROW está descontinuada en SQL Server 2012 (11.x)SQL Server 2012 (11.x) y se ha reemplazado por la sugerencia 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. Establecer el nivel de compatibilidad de base de datos en 110 no hará que la sugerencia descontinuada se restaure.Setting the database compatibility level to 110 will not restore the discontinued hint. Para más información sobre las funcionalidades descontinuadas, vea Funcionalidad del motor de base de datos no incluida en SQL Server 2016, Funcionalidad del motor de base de datos no incluida en SQL Server 2014, Funcionalidad del motor de base de datos no incluida en SQL Server 2012 y Funcionalidad del motor de base de datos no incluida en SQL Server 2008.For more information on discontinued functionality, see Discontinued Database Engine Functionality in SQL Server 2016, Discontinued Database Engine Functionality in SQL Server 2014, Discontinued Database Engine Functionality in SQL Server 2012, and Discontinued Database Engine Functionality in SQL Server 2008.

Importante

Los cambios importantes incluidos en una determinada versión de SQL ServerSQL Server pueden no estar protegidos por el nivel de compatibilidad.Breaking changes introduced in a given SQL ServerSQL Server version may not be protected by compatibility level. Esto hace referencia a cambios de comportamiento entre las versiones del Motor de base de datos de SQL ServerSQL Server Database Engine.This refers to behavior changes between versions of the Motor de base de datos de SQL ServerSQL Server Database Engine. El comportamiento de Transact-SQLTransact-SQL suele estar protegido por el nivel de compatibilidad. Transact-SQLTransact-SQL behavior is usually protected by compatibility level. En cambio, los objetos del sistema eliminados o modificados no están protegidos por el nivel de compatibilidad.However, changed or removed system objects are not protected by compatibility level.

Un ejemplo de cambio importante protegido por el nivel de compatibilidad es una conversión implícita del tipo de datos datetime a datetime2.An example of a breaking change protected by compatibility level is an implicit conversion from datetime to datetime2 data types. En el nivel de compatibilidad de base de datos 130, esto muestra una mayor precisión al reflejar las fracciones de milisegundos, lo que se traduce en 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 el comportamiento de conversión anterior, establezca el nivel de compatibilidad de base de datos en 120 o en uno inferior.To restore previous conversion behavior, set the database compatibility level to 120 or lower.

Estos son algunos ejemplos de cambios importantes no protegidos por el nivel de compatibilidad:Examples of breaking changes not protected by compatibility level are:

  • Nombres de columna modificados en objetos del sistema.Changed column names in system objects. En SQL Server 2012 (11.x)SQL Server 2012 (11.x) la columna single_pages_kb en sys.dm_os_sys_info se ha cambiado a 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. Independientemente del nivel de compatibilidad, la consulta SELECT single_pages_kb FROM sys.dm_os_sys_info generará el error 207 (Nombre de columna no vá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 del sistema quitados.Removed system objects. En SQL Server 2012 (11.x)SQL Server 2012 (11.x), la columna sp_dboption se ha quitado.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the sp_dboption was removed. Independientemente del nivel de compatibilidad, la instrucción EXEC sp_dboption 'AdventureWorks2016CTP3', 'autoshrink', 'FALSE'; generará el error 2812 (No se encontró el procedimiento almacenado 'sp_dboption').Regardless of the compatibility level, the statement EXEC sp_dboption 'AdventureWorks2016CTP3', 'autoshrink', 'FALSE'; will produce error 2812 (Could not find stored procedure 'sp_dboption').

Para más información sobre los cambios importantes, vea Cambios sustanciales en las características del motor de base de datos de SQL Server 2017, Cambios sustanciales en las características del motor de base de datos de SQL Server 2016, Cambios sustanciales en las características del motor de base de datos de SQL Server 2014, Cambios sustanciales en las características del motor de base de datos de SQL Server 2012 y Cambios sustanciales en las características del motor de base de datos de SQL Server 2008.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, Breaking Changes to Database Engine Features in SQL Server 2012, and Breaking Changes to Database Engine Features in SQL Server 2008.

Prácticas recomendadas para actualizar el nivel de compatibilidad de base de datosBest Practices for upgrading Database Compatibility Level

Para ver el flujo de trabajo recomendado para actualizar el nivel de compatibilidad, vea Cambiar el modo de compatibilidad de la base de datos y usar el almacén de consultas.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and Use the Query Store.

Niveles de compatibilidad y procedimientos almacenadosCompatibility Levels and Stored Procedures

Cuando se ejecuta un procedimiento almacenado, se utiliza el nivel de compatibilidad actual de la base de datos en la que se define.When a stored procedure executes, it uses the current compatibility level of the database in which it is defined. Cuando se cambia el nivel de compatibilidad de una base de datos, todos sus procedimientos almacenados se vuelven a compilar de forma automática según sea necesario.When the compatibility setting of a database is changed, all of its stored procedures are automatically recompiled accordingly.

Diferencias entre los niveles de compatibilidad 140 y 150Differences Between Compatibility Level 140 and Level 150

En esta sección se describen los nuevos comportamientos incluidos en el nivel de compatibilidad 150.This section describes new behaviors introduced with compatibility level 150.

El nivel de compatibilidad 150 de la base de datos está actualmente en versión preliminar privada de Azure SQL Database.Database compatibility level 150 is currently in Private Preview for Azure SQL Database. Este nivel de compatibilidad de la base de datos se asociará con la próxima generación de las mejoras de procesamiento de consultas más allá de lo que se introdujo en el nivel de compatibilidad 140 de la base de datos.This database compatibility level will be associated with the next generation of query processing improvements beyond what was introduced in database compatibility level 140.

Diferencias entre los niveles de compatibilidad 130 y 140Differences Between Compatibility Level 130 and Level 140

En esta sección se describen los nuevos comportamientos incluidos en el nivel de compatibilidad 140.This section describes new behaviors introduced with compatibility level 140.

Nivel de compatibilidad 130 o inferiorCompatibility-level setting of 130 or lower Nivel de compatibilidad 140Compatibility-level setting of 140
En las estimaciones de cardinalidad de las instrucciones que hacen referencia a funciones con valores de tabla de múltiples instrucciones se usa una estimación de fila fija.Cardinality estimates for statements referencing multi-statement table valued functions use a fixed row guess. En las estimaciones de cardinalidad de las instrucciones que hacen referencia a funciones con valores de tabla de múltiples instrucciones se usará la cardinalidad real de la salida de la función.Cardinality estimates for eligible statements referencing multi-statement table valued functions will use the actual cardinality of the function output. Esto es posible gracias a la ejecución intercalada de funciones con valores de tabla de múltiples instrucciones.This is enabled via interleaved execution for multi-statement table valued functions.
Las consultas de modo por lotes que solicitan tamaños de concesión de memoria insuficiente que resultan en desbordamientos de disco pueden seguir provocando problemas en las ejecuciones consecutivas.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Las consultas de modo por lotes que solicitan tamaños de concesión de memoria insuficiente que resultan en desbordamientos de disco pueden haber mejorado el rendimiento en las ejecuciones consecutivas.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Esto es posible a través de los comentarios de concesión de memoria del modo por lotes, que actualizarán el tamaño de concesión de memoria de un plan en caché si se han producido desbordamientos en el caso de los operadores de modo por lotes.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.
Las consultas de modo por lotes que solicitan un tamaño de concesión de memoria excesivo que resulta en problemas de simultaneidad pueden seguir provocando problemas en las ejecuciones consecutivas.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Las consultas de modo por lotes que solicitan un tamaño de concesión de memoria excesivo que resulta en problemas de simultaneidad pueden haber mejorado la simultaneidad en las ejecuciones consecutivas.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Esto es posible a través de los comentarios de concesión de memoria del modo por lotes, que actualizarán el tamaño de concesión de memoria de un plan en caché si se ha solicitado inicialmente una cantidad excesiva.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.
Las consultas de modo por lotes que contienen operadores de combinación son aptas para tres algoritmos de combinación físicos, a saber, bucle anidado, combinación hash y combinación de mezcla.Batch-mode queries that contain join operators are eligible for three physical join algorithms, including nested loop, hash join and merge join. Si las estimaciones de cardinalidad son incorrectas en las entradas de la combinación, existe el riesgo de seleccionar un algoritmo de combinación inadecuado.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. Si esto sucede, el rendimiento se verá afectado y el algoritmo de combinación incorrecto seguirá en uso hasta que el plan en caché se vuelva a compilar.If this occurs, performance will suffer and the inappropriate join algorithm will remain in-use until the cached plan is recompiled. Hay otro operador de combinación denominado combinación adaptable.There is an additional join operator called adaptive join. Si las estimaciones de cardinalidad son incorrectas en la entrada de combinación externa, existe el riesgo de seleccionar un algoritmo de combinación inadecuado.If cardinality estimates are incorrect for the outer build join input, an inappropriate join algorithm may be selected. Si esto sucede y la instrucción es apta para una combinación adaptable, se usará dinámicamente un bucle anidado en las entradas de combinación más pequeñas y una combinación hash en las entradas de combinación mayores, sin necesidad de volver a compilar.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.
Los planes triviales que hacen referencia a índices de almacén de columnas no son aptos para ejecutarse en el modo por lotes.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Un plan trivial que hace referencia a índices de almacén de columnas se descartarán en favor de un plan que sea apto para ejecutarse en el modo por lotes.A trivial plan referencing Columnstore indexes will be discarded in favor of a plan that is eligible for batch mode execution.
El operador UDX sp_execute_external_script solo se puede ejecutar en el modo de fila.The sp_execute_external_script UDX operator can only run in row mode. El operador UDX sp_execute_external_script se puede usar en la ejecución del modo por lotes.The sp_execute_external_script UDX operator is eligible for batch mode execution.
Las funciones con valores de tabla de múltiples instrucciones carecen de ejecución intercalada.Multi-statement table-valued functions (TVF's) do not have interleaved execution La ejecución intercalada es posible en las funciones con valores de tabla de múltiples instrucciones para mejorar la calidad del plan.Interleaved execution for multi-statement TVFs to improve plan quality.

Las correcciones incluidas en la marca de seguimiento 4199 en versiones de SQL Server anteriores a SQL Server 2017 ahora están habilitadas de forma predeterminadaFixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. en el modo de compatibilidad 140.With compatibility mode 140. La marca de seguimiento 4199 sigue siendo aplicable a las nuevas correcciones del optimizador de consultas que se publiquen después de SQL Server 2017.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2017. Para más información sobre la marca de seguimiento 4199, vea la marca de seguimiento 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Diferencias entre los niveles de compatibilidad 120 y 130Differences Between Compatibility Level 120 and Level 130

En esta sección se describen los nuevos comportamientos incluidos en el nivel de compatibilidad 130.This section describes new behaviors introduced with compatibility level 130.

Nivel de compatibilidad 120 o inferiorCompatibility-level setting of 120 or lower Nivel de compatibilidad 130Compatibility-level setting of 130
La instrucción INSERT en una instrucción INSERT-SELECT es de subproceso único.The INSERT in an INSERT-SELECT statement is single-threaded. La instrucción INSERT en una instrucción INSERT-SELECT es multiproceso o puede tener un plan paralelo.The INSERT in an INSERT-SELECT statement is multi-threaded or can have a parallel plan.
Las consultas en una tabla optimizada para memoria ejecutan un único subproceso.Queries on a memory-optimized table execute single-threaded. Ahora, las consultas en una tabla optimizada para memoria pueden tener planes paralelos.Queries on a memory-optimized table can now have parallel plans.
Incluyó el programa de estimación de cardinalidad de SQL 2014 CardinalityEstimationModelVersion="120".Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" Más mejoras en la estimación de cardinalidad con el modelo de estimación de cardinalidad 130, que es visible desde una consulta.Further cardinality estimation ( CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion="130"CardinalityEstimationModelVersion="130"
Cambios del modo por lotes frente al modo de fila con índices de almacén de columnas:Batch mode versus Row Mode changes with Columnstore indexes:
  • Las ordenaciones en una tabla con índice de almacén de columnas se producen en el modo de fila.Sorts on a table with Columnstore index are in Row mode
  • Los agregados de función basados en ventanas funcionan en el modo de fila, como LAG o LEAD.Windowing function aggregates operate in row mode such as LAG or LEAD
  • Las consultas en tablas de almacén de columnas con varias cláusulas Distinct funcionaban en el modo de fila.Queries on Columnstore tables with Multiple distinct clauses operated in Row mode
  • Las consultas que se ejecutan con Maxdop1 o un plan de consulta en serie se ejecutaban en el modo de fila.Queries running under MAXDOP 1 or with a serial plan executed in Row mode
Cambios del modo por lotes frente al modo de fila con índices de almacén de columnas:Batch mode versus Row Mode changes with Columnstore indexes:
  • Ahora, las ordenaciones en una tabla con índice de almacén de columnas se producen en el modo por lotes.Sorts on a table with a Columnstore index are now in batch mode
  • Ahora, los agregados basados en ventanas funcionan en el modo por lotes, como LAG o LEAD.Windowing aggregates now operate in batch mode such as LAG or LEAD
  • Las consultas en tablas de almacén de columnas con varias cláusulas Distinct funcionaban en el modo por lotes.Queries on Columnstore tables with Multiple distinct clauses operate in Batch mode
  • Las consultas que se ejecutan con MAXDOP 1 o con un plan de consulta en serie se ejecutan en el modo por lotes.Queries running under MAXDOP 1 or with a serial plan execute in Batch Mode
Las estadísticas se pueden actualizar automáticamente.Statistics can be automatically updated. La lógica que actualiza las estadísticas automáticamente es más agresiva en tablas grandes.The logic which automatically updates statistics is more aggressive on large tables. En la práctica, esto debería reducir los casos en los que los clientes advierten problemas de rendimiento en las consultas donde las filas recién insertadas se consultan con frecuencia, pero las estadísticas no se habían actualizado para incluir esos 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.
La marca de seguimiento 2371 está desactivada de forma predeterminada en 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). La marca de seguimiento 2371 está activada de forma predeterminada en 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). La marca de seguimiento 2371 indica al actualizador automático de estadísticas que muestree un subconjunto de filas más pequeño, pero más práctico, en una tabla que tiene un gran número de filas.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.

Una mejora consiste en incluir en el ejemplo más filas que se hayan insertado hace poco.One improvement is to include in the sample more rows that were inserted recently.

Otra mejora es permitir que las consultas se ejecuten mientras el proceso de actualización de estadísticas se ejecuta, en lugar de bloquearlas.Another improvement is to let queries run while the update statistics process is running, rather than blocking the query.
En el nivel 120, las estadísticas se muestrean a través de un proceso de subproceso único.For level 120, statistics are sampled by a single-threaded process. En el nivel 130, las estadísticas se muestrean a través de un proceso multiproceso.For level 130, statistics are sampled by a multi-threaded process.
El límite está establecido en 253 claves externas entrantes.253 incoming foreign keys is the limit. Hasta 10 000 claves externas entrantes (o referencias similares) pueden hacer referencia a una determinada tabla.A given table can be referenced by up to 10,000 incoming foreign keys or similar references. Para ver las restricciones, vea Create Foreign Key Relationships.For restrictions, see Create Foreign Key Relationships.
Se permiten los algoritmos hash en desuso MD2, MD4, MD5, SHA y SHA1.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. Solo se permiten los algoritmos hash SHA2_256 y SHA2_512.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
SQL Server 2016 (13.x)SQL Server 2016 (13.x) incluye mejoras en algunas operaciones (bastante infrecuentes) y conversiones de tipos de datos. includes improvements in some data types conversions and some (mostly uncommon) operations. Para más información, vea SQL Server 2016 improvements in handling some data types and uncommon operations (Mejoras de SQL Server 2016 en el tratamiento de algunos tipos de datos y operaciones infrecuentes).For details see SQL Server 2016 improvements in handling some data types and uncommon operations.
La función STRING_SPLIT no está disponible.The STRING_SPLIT function is not available. La función STRING_SPLIT está disponible en el nivel de compatibilidad 130 o superior.The STRING_SPLIT function is available under compatibility level 130 or above. Si el nivel de compatibilidad de la base de datos es inferior a 130, SQL ServerSQL Server no podrá encontrar ni ejecutar la función 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.

Las correcciones incluidas en la marca de seguimiento 4199 en versiones de SQL ServerSQL Server anteriores a SQL Server 2016 (13.x)SQL Server 2016 (13.x) ahora están habilitadas de forma predeterminadaFixes 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. en el modo de compatibilidad 130.With compatibility mode 130. La marca de seguimiento 4199 sigue siendo aplicable a las nuevas correcciones del optimizador de consultas que se publiquen después de 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 el optimizador de consultas anterior en SQL DatabaseSQL Database, hay que seleccionar el nivel de compatibilidad 110.To use the older query optimizer in SQL DatabaseSQL Database you must select compatibility level 110. Para más información sobre la marca de seguimiento 4199, vea la marca de seguimiento 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Diferencias entre los niveles de compatibilidad inferiores y el nivel 120Differences Between Lower Compatibility Levels and Level 120

En esta sección se describen nuevos comportamientos incluidos con el nivel de compatibilidad 120.This section describes new behaviors introduced with compatibility level 120.

Nivel de compatibilidad 110 o inferiorCompatibility-level setting of 110 or lower Nivel de compatibilidad 120Compatibility-level setting of 120
Se utiliza el optimizador de consultas más antiguo.The older query optimizer is used. SQL Server 2014 (12.x)SQL Server 2014 (12.x) incluye mejoras sustanciales en el componente que crea y optimiza los planes de consulta. includes substantial improvements to the component that creates and optimizes query plans. Esta nueva característica del optimizador de consultas depende del uso del nivel 120 de compatibilidad de base de datos.This new query optimizer feature is dependent upon use of the database compatibility level 120. Para aprovecharse estas mejoras, las nuevas aplicaciones de base de datos deben desarrollarse con el nivel 120 de compatibilidad de base de datos.New database applications should be developed using database compatibility level 120 to take advantage of these improvements. Las aplicaciones migradas de versiones anteriores de SQL ServerSQL Server deben probarse cuidadosamente para confirmar que el buen rendimiento se ha mantenido o se ha mejorado.Applications that are migrated from earlier versions of SQL ServerSQL Server should be carefully tested to confirm that good performance is maintained or improved. Si el rendimiento se degrada, puede establecer la compatibilidad de base de datos en el nivel 110 o inferior para usar la anterior metodología del optimizador de consultas.If performance degrades, you can set the database compatibility level to 110 or earlier to use the older query optimizer methodology.

El nivel de compatibilidad de la base de datos 120 usa un nuevo estimador de cardinalidad que está optimizado para cargas de trabajo modernas de almacenamiento de datos y OLTP.Database compatibility level 120 uses a new cardinality estimator that is tuned for modern data warehousing and OLTP workloads. Antes de establecer el nivel de compatibilidad de la base de datos en 110 debido a problemas de rendimiento, vea las recomendaciones incluidas en la sección Planes de consulta del tema de SQL Server 2014 (12.x)SQL Server 2014 (12.x) Novedades de Motor de base de datos.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.
En niveles de compatibilidad inferiores a 120, la configuración de idioma se omite al convertir un valor date en un valor de cadena.In compatibility levels lower than 120, the language setting is ignored when converting a date value to a string value. Cabe mencionar que este comportamiento es específico exclusivamente del tipo date.Note that this behavior is specific only to the date type. Vea el ejemplo B de la sección Ejemplos más abajo.See example B in the Examples section below. La configuración de idioma no se omite al convertir un valor date en un valor de cadena.The language setting is not ignored when converting a date value to a string value.
Las referencias recursivas en el lado derecho de una cláusula EXCEPT crean un bucle infinito.Recursive references on the right-hand side of an EXCEPT clause create an infinite loop. Este comportamiento se detalla en el ejemplo C de la sección Ejemplos más abajo.Example C in the Examples section below demonstrates this behavior. Las referencias recursivas en una cláusula EXCEPT generan un error de acuerdo con el estándar ANSI SQL.Recursive references in an EXCEPT clause generates an error in compliance with the ANSI SQL standard.
La expresión de tabla común (CTE) recursiva permite el uso de nombres de columna duplicados.Recursive common table expression (CTE) allows duplicate column names. CTE recursiva no admite nombres de columna duplicados.Recursive CTE do not allow duplicate column names.
Los desencadenadores deshabilitados se habilitan si se modifican los desencadenadores.Disabled triggers are enabled if the triggers are altered. Modificar un desencadenador no cambia el estado (habilitado o deshabilitado) del mismo.Altering a trigger does not change the state (enabled or disabled) of the trigger.
La cláusula de la tabla OUTPUT INTO omite IDENTITY_INSERT SETTING = OFF y permite que se inserten valores explícitos.The OUTPUT INTO table clause ignores the IDENTITY_INSERT SETTING = OFF and allows explicit values to be inserted. No puede insertar valores explícitos relativos a una columna de identidad en una tabla cuando IDENTITY_INSERT está establecido en OFF.You cannot insert explicit values for an identity column in a table when IDENTITY_INSERT is set to OFF.
Cuando la contención de la base de datos está establecida en parcial, al validar el campo $action en la cláusula OUTPUT de una instrucción MERGE, se puede devolver un error de intercalación.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. La intercalación de los valores devueltos por la cláusula $action de una instrucción MERGE es la intercalación de base de datos en lugar de la intercalación de servidor y no se devuelve un error de conflicto de intercalación.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.
Una instrucción SELECT INTO siempre crea una operación de inserción de subproceso único.A SELECT INTO statement always creates a single-threaded insert operation. Una instrucción SELECT INTO puede crear una operación de inserción en paralelo.A SELECT INTO statement can create a parallel insert operation. Al insertar un gran número de filas, la operación paralela puede mejorar el rendimiento.When inserting a large numbers of rows, the parallel operation can improve performance.

Diferencias entre los niveles de compatibilidad inferiores y los niveles 110 y 120Differences Between Lower Compatibility Levels and Levels 110 and 120

En esta sección se describen nuevos comportamientos incluidos con nivel de compatibilidad 110.This section describes new behaviors introduced with compatibility level 110. Esta sección también se aplica al nivel 120.This section also applies to level 120.

Nivel de compatibilidad 100 o inferiorCompatibility-level setting of 100 or lower Configuración de nivel de compatibilidad de al menos 110Compatibility-level setting of at least 110
Los objetos de base de datos de Common Language Runtime (CLR) se ejecutan con la versión 4 de CLR.Common language runtime (CLR) database objects are executed with version 4 of the CLR. Sin embargo, algunos cambios de comportamiento incluidos en la versión 4 de CLR se evitan.However, some behavior changes introduced in version 4 of the CLR are avoided. Para más información, vea What's New in CLR Integration (Novedades en la integración con CLR).For more information, see What's New in CLR Integration. Los objetos de base de datos de CLR se ejecutan con la versión 4 de CLR.CLR database objects are executed with version 4 of the CLR.
Las funciones de XQuery string-length y substring cuentan cada suplente como dos caracteres.The XQuery functions string-length and substring count each surrogate as two characters. Las funciones de XQuery string-length y substring cuentan cada suplente como un carácter.The XQuery functions string-length and substring count each surrogate as one character.
PIVOT se permite en una consulta de expresión de tabla común (CTE) recursiva.PIVOT is allowed in a recursive common table expression (CTE) query. Sin embargo, la consulta devuelve resultados incorrectos cuando hay varias filas por agrupación.However, the query returns incorrect results when there are multiple rows per grouping. PIVOT no se permite en una consulta de expresión de tabla común (CTE) recursiva.PIVOT is not allowed in a recursive common table expression (CTE) query. Se devuelve un error.An error is returned.
El algoritmo RC4 se admite únicamente por razones de compatibilidad con versiones anteriores.The RC4 algorithm is only supported for backward compatibility. El material nuevo solo se puede cifrar con RC4 o RC4_128 cuando la base de datos tenga el nivel de compatibilidad 90 o 100.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (No se recomienda). En SQL Server 2012 (11.x)SQL Server 2012 (11.x), el material cifrado con RC4 o RC4_128 se puede descifrar en cualquier nivel de compatibilidad.(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. El nuevo material no se puede cifrar mediante RC4 o RC4_128.New material cannot be encrypted using RC4 or RC4_128. Use un algoritmo más reciente como uno de los algoritmos AES en su lugar.Use a newer algorithm such as one of the AES algorithms instead. En SQL Server 2012 (11.x)SQL Server 2012 (11.x), el material cifrado con RC4 o RC4_128 se puede descifrar en cualquier nivel de compatibilidad.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.
El estilo predeterminado de las operaciones CAST y CONVERT en los tipos de datos time y datetime2 es 121, a menos que se use un tipo en una expresión de columna calculada.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 las columnas calculadas, el estilo predeterminado es 0.For computed columns, the default style is 0. Este comportamiento afecta a las columnas calculadas cuando se crean, cuando se utilizan en las consultas que implican parametrización automática o cuando se usan en definiciones de restricciones.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

En el ejemplo D de la sección Ejemplos más abajo se muestra la diferencia entre los estilos 0 y 121.Example D in the Examples section below shows the difference between styles 0 and 121. No se muestra el comportamiento descrito anteriormente.It does not demonstrate the behavior described above. Para más información sobre los estilos de fecha y hora, vea CAST y CONVERT (Transact-SQL).For more information about date and time styles, see CAST and CONVERT (Transact-SQL).
En el nivel de compatibilidad 110, el estilo predeterminado de las operaciones CAST y CONVERT en los tipos de datos time y datetime2 es siempre 121.Under compatibility level 110, the default style for CAST and CONVERT operations on time and datetime2 data types is always 121. Si su consulta se basa en el comportamiento anterior, use un nivel de compatibilidad menor de 110, o especifique explícitamente el estilo 0 en la consulta correspondiente.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.

Actualizar la base de datos al nivel de compatibilidad 110 no cambiará los datos de usuario que se hayan almacenado en disco.Upgrading the database to compatibility level 110 will not change user data that has been stored to disk. Debe corregir manualmente estos datos según convenga.You must manually correct this data as appropriate. Por ejemplo, si usa SELECT INTO para crear una tabla de un origen que contenía una expresión de columna calculada como la descrita anteriormente, los datos se almacenarían (si se usa el estilo 0) en lugar de la propia definición de columna calculada.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. Debería actualizar manualmente estos datos para que coincidieran con el estilo 121.You would need to manually update this data to match style 121.
Cualquier columna de las tablas remotas de tipo smalldatetime a la que se haga referencia en una vista con particiones se asignará como datetime.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime. Las columnas correspondientes de tablas locales (en la misma posición ordinal en la lista de selección) deben ser datetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type datetime. Cualquier columna de las tablas remotas de tipo smalldatetime a la que se haga referencia en una vista con particiones se asignará como smalldatetime.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. Las columnas correspondientes de tablas locales (en la misma posición ordinal en la lista de selección) deben ser smalldatetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type smalldatetime.

Después de actualizar a 110, la vista distribuida con particiones producirá un error debido a una discrepancia en los tipos de datos.After upgrading to 110, the distributed partitioned view will fail because of the data type mismatch. Puede resolver este problema cambiando el tipo de datos en la tabla remota a datetime o estableciendo el nivel de compatibilidad de la base de datos local en 100 o menos.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.
La función SOUNDEX implementa las siguientes reglas:SOUNDEX function implements the following rules:

1) Las letras H o W mayúsculas se omiten al separar dos consonantes que tienen el mismo número del 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) Si los dos primeros caracteres de character_expression tienen el mismo número del código de SOUNDEX, ambos caracteres se incluyen.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. Si un conjunto de consonantes en paralelo tiene el mismo número del código de SOUNDEX, se excluyen todas excepto la primera.Else, if a set of side-by-side consonants have same number in the SOUNDEX code, all of them are excluded except the first.
La función SOUNDEX implementa las siguientes reglas:SOUNDEX function implements the following rules:

1) Si H o W mayúsculas separan dos consonantes que tienen el mismo número en el código SOUNDEX, se omite la consonante de la derecha.1) 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) Si un conjunto de consonantes en paralelo tiene el mismo número del código de SOUNDEX, se excluyen todas excepto la primera.2) If a set of side-by-side consonants have same number in the SOUNDEX code, all of them are excluded except the first.



Las reglas adicionales pueden causar que los valores calculados por la función SOUNDEX sean diferentes de los calculados en niveles de compatibilidad menores.The additional rules may cause the values computed by the SOUNDEX function to be different than the values computed under earlier compatibility levels. Después de actualizar al nivel de compatibilidad 110, es posible que tenga que regenerar los índices, los montones o las restricciones CHECK que usan la función SOUNDEX.After upgrading to compatibility level 110, you may need to rebuild the indexes, heaps, or CHECK constraints that use the SOUNDEX function. Para más información, vea SOUNDEX (Transact-SQL).For more information, see SOUNDEX (Transact-SQL).

Diferencias entre los niveles de compatibilidad 90 y 100Differences Between Compatibility Level 90 and Level 100

En esta sección se describen nuevos comportamientos incluidos con nivel de compatibilidad 100.This section describes new behaviors introduced with compatibility level 100.

Nivel de compatibilidad 90Compatibility-level setting of 90 Nivel de compatibilidad 100Compatibility-level setting of 100 Posibilidad de impactoPossibility of impact
El valor QUOTED_IDENTIFER siempre está establecido en ON para las funciones con valores de tabla con múltiples instrucciones cuando se crean sin tener en cuenta el valor de nivel de sesión.The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting. El valor de sesión de QUOTED IDENTIFIER se cumple cuando se crean funciones con valores de tabla con múltiples instrucciones.The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created. MediaMedium
Al crear o modificar una función de partición, los literales datetime y smalldatetime de la función se evalúan suponiendo que US_English es la configuración 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. La configuración de idioma actual se usa para evaluar los literales datetime y smalldatetime en la función de partición.The current language setting is used to evaluate datetime and smalldatetime literals in the partition function. MediaMedium
La cláusula FOR BROWSE se admite (y se omite) en las instrucciones INSERT y SELECT INTO.The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements. La cláusula FOR BROWSE no se admite en las instrucciones INSERT y SELECT INTO.The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements. MediaMedium
Los predicados de texto completo se permiten en la cláusula OUTPUT.Full-text predicates are allowed in the OUTPUT clause. Los predicados de texto completo no se permiten en la cláusula OUTPUT.Full-text predicates are not allowed in the OUTPUT clause. BajaLow
No se admite CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST ni DROP FULLTEXT STOPLIST.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. La lista de palabras irrelevantes del sistema se asocia automáticamente a nuevos índices de texto completo.The system stoplist is automatically associated with new full-text indexes. Se admite CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST y DROP FULLTEXT STOPLIST.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. BajaLow
MERGE no se aplica como una palabra clave reservada.MERGE is not enforced as a reserved keyword. MERGE es una palabra clave totalmente reservada.MERGE is a fully reserved keyword. La instrucción MERGE se admite por debajo de los niveles de compatibilidad 100 y 90.The MERGE statement is supported under both 100 and 90 compatibility levels. BajaLow
Al usar el argumento <dml_table_source> de la instrucción INSERT, se genera un error de sintaxis.Using the <dml_table_source> argument of the INSERT statement raises a syntax error. Puede capturar los resultados de una cláusula OUTPUT en una instrucción anidada INSERT, UPDATE, DELETE o MERGE, e insertar los resultados obtenidos en una vista o tabla 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. Para ello, es necesario usar el argumento <dml_table_source> de la instrucción INSERT.This is done using the <dml_table_source> argument of the INSERT statement. BajaLow
A menos que se especifique NOINDEX, DBCC CHECKDB o DBCC CHECKTABLE realizan comprobaciones de coherencia física y lógica en una sola tabla o vista indexada, y en todos sus índices XML y no agrupados.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. Los índices espaciales no se admiten.Spatial indexes are not supported. A menos que se especifique NOINDEX, DBCC CHECKDB o DBCC CHECKTABLE realizan comprobaciones de coherencia física y lógica en una sola tabla y en todos sus índices no agrupados.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. Sin embargo, en los índices XML, índices espaciales y vistas indexadas solamente se realizan comprobaciones de coherencia física de forma predeterminada.However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.

Si se especifica WITH EXTENDED_LOGICAL_CHECKS, se realizan comprobaciones lógicas en las vistas indexadas, índices XML e índices espaciales, si los hay.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. De forma predeterminada, las comprobaciones de coherencia física se realizan antes que las comprobaciones de coherencia lógica.By default, physical consistency checks are performed before the logical consistency checks. Si también se especifica NOINDEX, solamente se realizarán las comprobaciones lógicas.If NOINDEX is also specified, only the logical checks are performed.
BajaLow
Cuando una cláusula OUTPUT se utiliza con una instrucción del lenguaje de manipulación de datos (DML) y se produce un error en tiempo de ejecución durante la ejecución de la instrucción, toda la transacción se termina y se revierte.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. Cuando una cláusula OUTPUT se usa con una instrucción del lenguaje de manipulación de datos (DML) y ocurre un error en tiempo de ejecución durante la ejecución de la instrucción, el comportamiento depende del valor 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. Si SET XACT_ABORT es OFF, un error de anulación de la instrucción generado por la instrucción DML que usa la cláusula OUTPUT terminará la instrucción, pero la ejecución del lote continúa y la transacción no se revierte.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. Si SET XACT_ABORT es ON, todos los errores en tiempo de ejecución generados por la instrucción DML que usa la cláusula OUTPUT terminarán el lote y la transacción se revertirá.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. BajaLow
CUBE y ROLLUP no se exigen como palabras clave reservadas.CUBE and ROLLUP are not enforced as reserved keywords. CUBE y ROLLUP son palabras clave reservadas dentro de la cláusula GROUP BY.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. BajaLow
A los elementos de tipo anyType de XML se les aplica una validación estricta.Strict validation is applied to elements of the XML anyType type. A los elementos de tipo anyType de XML se les aplica una validación flexible.Lax validation is applied to elements of the anyType type. Para más información, vea Componentes comodín y validación del contenido.For more information, see Wildcard Components and Content Validation. BajaLow
Los atributos especiales xsi:nil y xsi:type no se pueden consultar ni modificar con instrucciones del lenguaje de manipulación de datos (DML).The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.

Esto significa que /e/@xsi:nil genera un error mientras que /e/@* omite los atributos xsi:nil y xsi:type.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. En cambio, /e devuelve los atributos xsi:nil y xsi:type por coherencia con SELECT xmlCol, aun cuando xsi:nil = "false".However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
Los atributos especiales xsi:nil y xsi:type se almacenan como atributos regulares y se puede consultar y modificar.The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.

Por ejemplo, al ejecutar la consulta SELECT x.query('a/b/@*'), se devuelven todos los atributos incluidos xsi:nil y xsi:type.For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. Para excluir estos tipos en la consulta, reemplace @* por @*[namespace-uri(.) != "insert xsi namespace uri" y no (local-name(.) = "type" ni 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".
BajaLow
Una función definida por el usuario que convierta un valor de cadena constante XML en un tipo datetime de SQL ServerSQL Server se marca como determinista.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as deterministic. Una función definida por el usuario que convierta un valor de cadena constante XML a un tipo datetime de SQL ServerSQL Server se marca como no determinista.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as non-deterministic. BajaLow
Los tipos de lista y unión de XML no se admiten por completo.The XML union and list types are not fully supported. Los tipos de lista y unión que se admiten totalmente incluyen la funcionalidad siguiente:The union and list types are fully supported including the following functionality:

Unión de listaUnion of list

Unión de uniónUnion of union

Lista de tipos atómicosList of atomic types

Lista de uniónList of union
BajaLow
Las opciones de SET requeridas para un método de XQuery no se validan cuando el método está contenido en una vista o función con valores de tabla insertados.The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function. Las opciones de SET requeridas para un método de XQuery se validan cuando el método está contenido en una vista o función con valores de tabla insertados.The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. Se produce un error si las opciones de SET del método se establecen incorrectamente.An error is raised if the SET options of the method are set incorrectly. BajaLow
Los valores de los atributos XML que contienen caracteres de fin de línea (retorno de carro y avance de línea) no se normalizan según el estándar XML.XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. Es decir, ambos caracteres se devuelven en lugar de un único carácter de avance de línea.That is, both characters are returned instead of a single line-feed character. Los valores de los atributos XML que contienen caracteres de fin de línea (retorno de carro y avance de línea) se normalizan de acuerdo con el estándar XML.XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. Es decir, todos los saltos de línea de las entidades externas analizadas (incluidas las de documento) se normalizan en la entrada traduciendo la secuencia de dos caracteres #xD #xA y cualquier #xD al que no siga #xA por un solo carácter #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.

Las aplicaciones que utilizan atributos para transportar los valores de cadena que contienen caracteres de fin de línea no recibirán de vuelta estos caracteres a medida que se envíen.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 el proceso de normalización, utilice entidades de caracteres numéricos XML para codificar todos los caracteres de fin de línea.To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
BajaLow
Las propiedades de columna ROWGUIDCOL e IDENTITY se pueden denominar incorrectamente como una restricción.The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. Por ejemplo, la instrucción CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) se ejecuta, pero el nombre de restricción no se conserva y no es accesible para el usuario.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. Las propiedades de columna ROWGUIDCOL e IDENTITY no se pueden denominar como una restricción.The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. Se devuelve el error 156.Error 156 is returned. BajaLow
Al actualizar las columnas usando una asignación bidireccional como UPDATE T1 SET @v = column_name = <expression>, se pueden generar resultados inesperados porque durante la ejecución de la instrucción se puede usar el valor real de la variable en otras cláusulas como WHERE y ON en lugar del valor inicial de la instrucción.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. Esto puede hacer que los significados de los predicados cambien de forma imprevisible según cada fila.This can cause the meanings of the predicates to change unpredictably on a per-row basis.

Este comportamiento solo es aplicable cuando el nivel de compatibilidad está establecido en 90.This behavior is applicable only when the compatibility level is set to 90.
Al actualizar las columnas utilizando una asignación bidireccional, se generan los resultados previstos porque solo se obtiene acceso al valor inicial de la columna de la instrucción durante la ejecución de la misma.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. BajaLow
Vea el ejemplo E en la sección Ejemplos más abajo.See example E in the Examples section below. Vea el ejemplo F en la sección Ejemplos más abajo.See example F in the Examples section below. BajaLow
La función ODBC {fn CONVERT()} utiliza el formato de fecha predeterminado del lenguaje.The ODBC function {fn CONVERT()} uses the default date format of the language. En algunos lenguajes, el formato predeterminado es ADM, lo que puede producir errores de conversión cuando CONVERT() se combina con otras funciones, como {fn CURDATE()}, que espera un formato AMD.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. La función ODBC {fn CONVERT()} usa el estilo 121 (un formato AMD independiente del lenguaje) al convertir a los tipos de datos ODBC SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME y 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. BajaLow
Los tipos de fecha y hora intrínsecos como DATEPART no requieren que los valores de entrada de cadena sean literales de fecha y hora válidos.Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. Por ejemplo, SELECT DATEPART (year, '2007/05-30') se compila correctamente.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. Los tipos de fecha y hora intrínsecos como DATEPART requieren que los valores de entrada de cadena sean literales de fecha y hora válidos.Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. Se devuelve el error 241 cuando se utiliza un literal de fecha y hora no válido.Error 241 is returned when an invalid datetime literal is used. BajaLow

Palabras clave reservadasReserved Keywords

El nivel de compatibilidad también determina las palabras clave reservadas por el Motor de base de datosDatabase Engine.The compatibility setting also determines the keywords that are reserved by the Motor de base de datosDatabase Engine. En la tabla siguiente se muestran las palabras clave reservadas que inserta cada nivel de compatibilidad.The following table shows the reserved keywords that are introduced by each of the compatibility levels.

Nivel de compatibilidadCompatibility-level setting Palabras clave reservadasReserved keywords
130130 por determinar.To be determined.
120120 Ninguno.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

En un nivel de compatibilidad dado, las palabras clave reservadas incluyen todas las palabras clave insertadas en ese nivel o debajo del mismo.At a given compatibility level, the reserved keywords include all of the keywords introduced at or below that level. Por ejemplo, para aplicaciones en el nivel 110, todas las palabras clave mostradas en la tabla anterior son reservadas.Thus, for instance, for applications at level 110, all of the keywords listed in the preceding table are reserved. En los niveles de compatibilidad inferiores, las palabras clave del nivel 100 siguen siendo nombres de objeto válidos, pero las características de idioma del nivel 110 correspondientes a esas palabras clave no están disponibles.At the lower compatibility levels, level-100 keywords remain valid object names, but the level-110 language features corresponding to those keywords are unavailable.

Una vez insertada, una palabra clave permanece reservada.Once introduced, a keyword remains reserved. Por ejemplo, la palabra clave reservada PIVOT, que se introdujo en el nivel de compatibilidad 90, también está reservada en los niveles 100, 110 y 120.For example, the reserved keyword PIVOT, which was introduced in compatibility level 90, is also reserved in levels 100, 110, and 120.

Si una aplicación utiliza un identificador que está reservado como palabra clave para su nivel de compatibilidad, la aplicación generará un error.If an application uses an identifier that is reserved as a keyword for its compatibility level, the application will fail. Para resolver este problema, incluya el identificador entre corchetes ([]) o comillas (""); por ejemplo, para actualizar una aplicación que usa el identificador EXTERNAL al nivel de compatibilidad 90, puede cambiar el identificador a [EXTERNAL] o "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 obtener más información, vea Palabras clave reservadas (Transact-SQL).For more information, see Reserved Keywords (Transact-SQL).

PermisosPermissions

Requiere el permiso ALTER en la base de datos.Requires ALTER permission on the database.

EjemplosExamples

A.A. Cambiar el nivel de compatibilidadChanging the compatibility level

En el siguiente ejemplo se cambia el nivel de compatibilidad de la base de datos AdventureWorks2012AdventureWorks2012 a 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  

En el siguiente ejemplo se devuelve el nivel de compatibilidad de la base de datos actual.The following example returns the compatibility level of the current database.

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

B.B. Omitir la instrucción SET LANGUAGE excepto en el nivel de compatibilidad 120Ignoring the SET LANGUAGE statement except under compatibility level 120

La siguiente consulta omite la instrucción SET LANGUAGE excepto en el nivel de compatibilidad 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.

En el nivel de compatibilidad 110 o inferior, las referencias recursivas en el lado derecho de una cláusula EXCEPT crean un bucle infinito.For 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.

En el siguiente ejemplo se muestra la diferencia entre los estilos 0 y 121.This example shows the difference between styles 0 and 121. Para más información sobre los estilos de fecha y hora, vea CAST y CONVERT (Transact-SQL).For more information about date and time styles, see CAST and CONVERT (Transact-SQL).

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.

La asignación de variables se permite en una instrucción que contenga un operador UNION de nivel superior, pero devuelve resultados inesperados.Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. Por ejemplo, en las instrucciones siguientes, a @v se le asigna el valor de la columna BusinessEntityID a partir de la unión de dos tablas.For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. Por definición, si la instrucción SELECT devuelve más de un valor, se asigna a la variable el último valor devuelto.By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. En este caso, a la variable se le asigna correctamente el último valor, sin embargo, también se devuelve el conjunto de resultados de la instrucción SELECT UNION.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;  

F.F.

No se permite la asignación de variables en una instrucción que contiene un operador UNION de nivel superior.Variable assignment is not allowed in a statement containing a top-level UNION operator. Se devuelve el error 10734.Error 10734 is returned. Para resolver el error, reescriba la consulta según se muestra en el ejemplo siguiente.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;  

Ver tambiénSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Palabras clave reservadas (Transact-SQL) Reserved Keywords (Transact-SQL)
CREATE DATABASE (Transact-SQL de SQL Server) CREATE DATABASE (SQL Server Transact-SQL)
DATABASEPROPERTYEX (Transact-SQL) DATABASEPROPERTYEX (Transact-SQL)
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
sys.database_files (Transact-SQL)sys.database_files (Transact-SQL)
Ver o cambiar el nivel de compatibilidad de una base de datosView or Change the Compatibility Level of a Database