Livello di compatibilità ALTER DATABASE (Transact-SQL)ALTER DATABASE (Transact-SQL) Compatibility Level

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Imposta i comportamenti di Transact-SQLTransact-SQL e dell'elaborazione delle query in modo che risultino compatibili con la versione specificata del Motore di database di SQL ServerSQL Server Database Engine.Sets Transact-SQLTransact-SQL and query processing behaviors to be compatible with the specified version of the Motore di database di SQL ServerSQL Server Database Engine. Per altre opzioni di ALTER DATABASE, vedere ALTER DATABASE.For other ALTER DATABASE options, see ALTER DATABASE.

Per altre informazioni sulle convenzioni di sintassi, vedere Convenzioni della sintassi Transact-SQL.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

SintassiSyntax

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

ArgomentiArguments

database_name database_name
Nome del database da modificare.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 }
Versione di SQL ServerSQL Server con cui il database deve risultare compatibile.Is the version of SQL ServerSQL Server with which the database is to be made compatible. È possibile configurare i valori di livello di compatibilità seguenti (non tutte le versioni supportano tutti i livelli di compatibilità elencati):The following compatibility level values can be configured (not all versions supports all of the above listed compatibility level):

ProdottoProduct Versione del motore di databaseDatabase Engine Version Designazione del livello di compatibilità predefinitoDefault Compatibility Level Designation Valori del livello di compatibilità supportatoSupported Compatibility Level Values
SQL Server 2019SQL Server 2019 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
Database singolo/pool elastico di Database SQL di AzureAzure SQL DatabaseDatabase SQL di AzureAzure SQL Database single database/elastic pool 1212 140140 150, 140, 130, 120, 110, 100150, 140, 130, 120, 110, 100
Istanza gestita di Database SQL di AzureAzure SQL DatabaseDatabase SQL di AzureAzure SQL Database managed 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

Per tutte le installazioni di SQL ServerSQL Server, il livello di compatibilità predefinito è impostato in base alla versione del Motore di databaseDatabase Engine.For all installations of SQL ServerSQL Server, the default compatibility level is set to the version of the Motore di databaseDatabase Engine. Per i database viene impostato questo livello, a meno che per il database model non sia impostato un livello di compatibilità inferiore.Databases are set to this level unless the model database has a lower compatibility level. Quando si aggiorna un database da una qualsiasi versione precedente di SQL ServerSQL Server, il database mantiene il livello di compatibilità esistente, se questo è almeno il livello minimo ammesso per quell'istanza di 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. Se in fase di aggiornamento di un database viene usato un livello di compatibilità inferiore a quello consentito, il database viene automaticamente impostato al livello più basso di compatibilità consentito.Upgrading a database with a compatibility level lower than the allowed level, automatically sets the database to the lowest compatibility level allowed. Questo comportamento si applica sia ai database di sistema che ai database utente.This applies to both system and user databases.

Sono previsti i comportamenti seguenti per SQL Server 2017 (14.x)SQL Server 2017 (14.x) quando un database viene collegato o ripristinato e dopo un aggiornamento sul posto: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 il livello di compatibilità di un database utente era 100 o superiore prima dell'aggiornamento, rimane invariato dopo l'aggiornamento.If the compatibility level of a user database was 100 or higher before the upgrade, it remains the same after upgrade.
  • Se il livello di compatibilità di un database utente è 90 prima dell'aggiornamento, nel database aggiornato viene impostato su 100, ovvero sul livello di compatibilità supportato più basso in 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).
  • I livelli di compatibilità dei database tempdb, model, msdb e Resource vengono impostati sul livello di compatibilità predefinito per una determinata versione di Motore di databaseDatabase Engine.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the default compatibility level for a given Motore di databaseDatabase Engine version.
  • Per il database di sistema master viene mantenuto il livello di compatibilità precedente l'aggiornamento.The master system database retains the compatibility level it had before upgrade.

Usare ALTER DATABASE per modificare il livello di compatibilità del database.Use ALTER DATABASE to change the compatibility level of the database. L'impostazione del nuovo livello di compatibilità per un database diventa effettiva quando si esegue un comando USE <database> o quando viene elaborato un nuovo accesso con quel database come contesto di database predefinito.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. Per visualizzare il livello di compatibilità corrente di un database, eseguire una query sulla colonna compatibility_level nella vista del catalogo sys.databases.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

Nota

Un database di distribuzione creato in una versione precedente di SQL ServerSQL Server e aggiornato a SQL Server 2016 (13.x)SQL Server 2016 (13.x) RTM o Service Pack 1 ha il livello di compatibilità 90 che non è supportato per altri database.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. Ciò non determina alcun impatto sulle funzionalità di replica.This does not have an impact on the functionality of replication. L'aggiornamento a Service Pack e versioni più recenti di SQL ServerSQL Server determinerà l'innalzamento del livello di compatibilità del database di distribuzione in modo da corrispondere a quello del database master.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.

A partire da gennaio 2018, nel Database SQL di AzureAzure SQL Database, il livello di compatibilità predefinito è 140 per i nuovi database.As of January 2018, in Database SQL di AzureAzure SQL Database, the default compatibility level is 140 for newly created databases. Per i database esistenti, il livello di compatibilità del database non viene aggiornato.We do not update database compatibility level for existing databases. I clienti possono decidere l'approccio da adottare in base alle proprie esigenze.It is up to customers to do at their own discretion. Microsoft consiglia di pianificare l'aggiornamento al livello di compatibilità più recente per trarre vantaggio dai miglioramenti apportati all'ottimizzazione query.Microsoft highly recommends that customers plan to upgrade to the latest compatibility level in order to leverage the latest query optimization improvements. Per sfruttare in generale il livello di compatibilità 140 del database, ma al tempo stesso usare il modello di stima della cardinalità di SQL Server 2012 (11.x)SQL Server 2012 (11.x), che corrisponde al livello di compatibilità 110 del database, vedere ALTER DATABASE SCOPED CONFIGURATION e in particolare la parola chiave 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.

Per informazioni dettagliate su come valutare le variazioni delle prestazioni delle query più importanti tra i due livelli di compatibilità Database SQL di AzureAzure SQL Database vedere Prestazioni delle query migliorate con il livello di compatibilità 130 in Database SQL di Azure.For details about how to assess the performance differences of your most important queries, between two compatibility levels on Database SQL di AzureAzure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database. Si noti che questo articolo si riferisce al livello di compatibilità 130 e SQL ServerSQL Server, ma la stessa metodologia si applica ai passaggi al livello 140 per SQL ServerSQL Server e il Database SQL di 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 Database SQL di AzureAzure SQL Database.

Per determinare la versione del Motore di databaseDatabase Engine a cui si è connessi, eseguire la query seguente.To determine the version of the Motore di databaseDatabase Engine that you are connected to, execute the following query.

SELECT SERVERPROPERTY('ProductVersion');

Nota

Non tutte le funzionalità che variano in base al livello di compatibilità sono supportate nel Database SQL di AzureAzure SQL Database.Not all features that vary by compatibility level are supported on Database SQL di AzureAzure SQL Database.

Per determinare il livello di compatibilità corrente, eseguire una query sulla colonna compatibility_level di sys.databases.To determine the current compatibility level, query the compatibility_level column of sys.databases.

SELECT name, compatibility_level FROM sys.databases;

Livelli di compatibilità e aggiornamenti di SQL ServerCompatibility Levels and SQL Server Upgrades

Il livello di compatibilità del database è un utile strumento nella modernizzazione dei database poiché consente di aggiornare il Motore di database di SQL ServerSQL Server Database Engine e di preservare lo stato funzionale delle applicazioni che si connettono mantenendo lo stesso livello di compatibilità del database precedente all'aggiornamento.Database compatibility level is a valuable tool to assist in database modernization, by allowing the Motore di database di SQL ServerSQL Server Database Engine to be upgraded, while keeping connecting applications functional status by maintaining the same pre-upgrade database compatibility level. Se l'applicazione non richiede l'uso dei miglioramenti disponibili solo in un livello di compatibilità superiore, esso costituisce un valido approccio per aggiornare il Motore di database di SQL ServerSQL Server Database Engine e mantenere il precedente livello di compatibilità del database.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 Motore di database di SQL ServerSQL Server Database Engine and maintain the previous database compatibility level. Per altre informazioni sull'uso del livello di compatibilità per la compatibilità con le versioni precedenti, vedere Uso del livello di compatibilità per garantire la compatibilità con le versioni precedenti più avanti in questo articolo.For more information on using compatibility level for backward compatibility, see the Using Compatibility Level for Backward Compatibility later in this article.

Per i nuovi progetti di sviluppo o quando un'applicazione esistente richiede l'uso di nuove funzionalità o dei miglioramenti in termini di prestazioni offerti da Query Optimizer, pianificare l'aggiornamento del livello di compatibilità del database a quello più recente disponibile in SQL ServerSQL Server e certificare l'applicazione per l'uso di questo livello di compatibilità.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. Per altri dettagli sull'aggiornamento del livello di compatibilità del database, vedere Procedure consigliate per aggiornare il livello di compatibilità del database più avanti in questo articolo.For more details on upgrading the database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

Suggerimento

Se un'applicazione è stata testata e certificata in una determinata versione di SQL ServerSQL Server, essa è stata implicitamente testata e certificata nel livello di compatibilità del database nativo di questa versione di 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.

Quando si usa il livello di compatibilità del database corrispondente alla versione di SQL ServerSQL Server testata, il livello di compatibilità del database offre pertanto un facile percorso di certificazione per un'applicazione esistente.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.

Per altre informazioni sulle differenze tra i livelli di compatibilità, vedere le sezioni appropriate più avanti in questo articolo.For more information about differences between compatibility levels, see the appropriate sections later in this article.

Per aggiornare il Motore di database di SQL ServerSQL Server Database Engine alla versione più recente, mantenendo il livello di compatibilità del database che esisteva prima dell'aggiornamento e il relativo stato di supporto, è consigliabile eseguire la convalida della superficie di attacco funzionale statica del codice dell'applicazione nel database (oggetti di programmabilità come stored procedure, funzioni, trigger e altri) e nell'applicazione (mediante una traccia del carico di lavoro che acquisisce il codice dinamico inviato dall'applicazione) usando lo strumento Microsoft Data Migration Assistant (DMA).To upgrade the Motore di database di 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 (programmability objects such as stored procedures, functions, triggers, and others) and in the application (using a workload trace that captures the dynamic code sent by the application), by using the Microsoft Data Migration Assistant tool (DMA). L'assenza di errori nell'output dello strumento DMA, relativi a funzionalità mancanti o non compatibili, protegge l'applicazione da regressioni funzionali nella nuova versione di destinazione.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. Per altre informazioni sullo strumento DMA, vedere qui.For more information on the DMA tool, see here.

Nota

DMA supporta il livello di compatibilità del database 100 e superiore.DMA supports database compatibility level 100 and above. SQL Server 2005 (9.x)SQL Server 2005 (9.x) come versione di origine è escluso.as source version is excluded.

Importante

Microsoft consiglia di eseguire una quantità minima di test per convalidare l'esito positivo di un aggiornamento mantenendo il livello di compatibilità del database precedente.Microsoft recommends that some minimal testing is done to validate the success of an upgrade, while maintaining the previous database compatibility level. Determinare questa quantità minima di test in base all'applicazione e allo scenario specifici.You should determine what minimal testing means for your own application and scenario.

Nota

Microsoft offre protezione della forma del piano di query quando:Microsoft provides query plan shape protection when:

  • La nuova versione di SQL ServerSQL Server (destinazione) viene eseguita su hardware simile a quello in cui veniva eseguita la versione precedente di SQL ServerSQL Server (origine).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.
  • Viene usato lo stesso livello di compatibilità del database supportato nell'istanza di SQL ServerSQL Server di destinazione e nell'istanza di SQL ServerSQL Server di origine.The same supported database compatibility level is used both at the target SQL ServerSQL Server and source SQL ServerSQL Server.

Eventuali regressioni della forma del piano di query (rispetto all'istanza di SQL ServerSQL Server di origine) che si dovessero verificare nelle condizioni sopra riportate verranno risolte.Any query plan shape regression (as compared to the source SQL ServerSQL Server) that occurs in the above conditions will be addressed. A questo scopo, contattare il supporto tecnico Microsoft.Please contact Microsoft Customer Support if this is the case.

Utilizzo del livello di compatibilità per garantire la compatibilità con le versioni precedentiUsing Compatibility Level for Backward Compatibility

L'impostazione del livello di compatibilità del database influisce sui comportamenti solo del database specificato, non dell'intero server.The database compatibility level setting affects behaviors only for the specified database, not for the entire server. Il livello di compatibilità del database offre la compatibilità con le versioni precedenti di SQL ServerSQL Server in relazione ai comportamenti di Transact-SQLTransact-SQL e di ottimizzazione query.Database compatibility level provides backward compatibility with earlier versions of SQL ServerSQL Server in what relates to Transact-SQLTransact-SQL and query optimization behaviors.

Suggerimento

Poiché il livello di compatibilità del database è un'impostazione a livello di database, un'applicazione in esecuzione su un Motore di database di SQL ServerSQL Server Database Engine più recente con un livello di compatibilità del database meno recente può comunque sfruttare i miglioramenti a livello di server senza alcun bisogno di modifiche all'applicazione.Because database compatibility level is a database-level setting, an application running on a newer Motore di database di SQL ServerSQL Server Database Engine while using an older database compatibility level, can still leverage server-level enhancements without any requirement for application changes.

Questi includono miglioramenti del monitoraggio e della risoluzione dei problemi, con le nuove Viste a gestione dinamica (DMV) di sistema e gli Eventi estesi.These include rich monitoring and troubleshooting improvements, with new System Dynamic Management Views and Extended Events. È stata inoltre migliorata la scalabilità, ad esempio con l'Architettura soft-NUMA automatica.And also improved scalability, for example with Automatic Soft-NUMA .

A partire dalla modalità di compatibilità 130, tutte le nuove funzionalità che influiscono sul piano di query sono state aggiunte intenzionalmente solo al nuovo livello di compatibilità.Starting with compatibility mode 130, any new query plan affecting features have been intentionally added only to the new compatibility level. In questo modo si riduce al minimo il rischio che si corre durante gli aggiornamenti di ridurre il livello delle prestazioni per modifiche apportate al piano di query potenzialmente introdotte dai nuovi comportamenti di ottimizzazione query.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.
Dal punto di vista dell'applicazione, l'obiettivo dovrebbe essere sempre l'aggiornamento al livello di compatibilità più recente per ereditare alcune delle nuove funzionalità come l'elaborazione di query intelligenti, il tutto eseguito in modo controllato.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 such as Intelligent Query Processing, but to do so in a controlled way. Per una migrazione più sicura in cui sia possibile risolvere i problemi correlati alle differenze tra le versioni usare il livello di compatibilità inferiore nei comportamenti controllati dall'impostazione del livello di compatibilità pertinente.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. Per altri dettagli, incluso il flusso di lavoro consigliato per aggiornare il livello di compatibilità del database, vedere Procedure consigliate per aggiornare il livello di compatibilità del database più avanti in questo articolo.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

Le funzionalità che non sono più supportate in una determinata versione di SQL ServerSQL Server non sono protette dal livello di compatibilità.Discontinued functionality introduced in a given SQL ServerSQL Server version is not protected by compatibility level. Ciò si riferisce alle funzionalità rimosse dal Motore di database di SQL ServerSQL Server Database Engine.This refers to functionality that was removed from the Motore di database di SQL ServerSQL Server Database Engine. Ad esempio, l'hint FASTFIRSTROW non è più supportato in SQL Server 2012 (11.x)SQL Server 2012 (11.x) ed è stato sostituito dall'hint 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. Se il livello di compatibilità del database viene impostato su 110, l'hint che non è più supportato non viene ripristinato.Setting the database compatibility level to 110 will not restore the discontinued hint.

Per altre informazioni sulle funzionalità non più disponibili, vedere Funzionalità del motore di database non più usate in SQL Server 2016, Funzionalità del motore di database non più usate in SQL Server 2014 e Funzionalità del motore di database non più usate in 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

Le modifiche di rilievo introdotte in una determinata versione di SQL ServerSQL Server potrebbero non essere protette dal livello di compatibilità.Breaking changes introduced in a given SQL ServerSQL Server version may not be protected by compatibility level. Ciò si riferisce alle modifiche funzionali tra le versioni del Motore di database di SQL ServerSQL Server Database Engine.This refers to behavior changes between versions of the Motore di database di SQL ServerSQL Server Database Engine. Il comportamento di Transact-SQLTransact-SQL è generalmente protetto dal livello di compatibilità.Transact-SQLTransact-SQL behavior is usually protected by compatibility level. Gli oggetti di sistema modificati o rimossi non sono tuttavia protetti dal livello di compatibilità.However, changed or removed system objects are not protected by compatibility level.

Un esempio di modifica di rilievo protetta dal livello di compatibilità è la conversione implicita di un tipo di dati datetime in datetime2.An example of a breaking change protected by compatibility level is an implicit conversion from datetime to datetime2 data types. Con il livello di compatibilità del database 130, in questi tipi di dati si rileva una maggiore precisione prevedendo i millisecondi frazionari, risultanti in diversi valori convertiti.Under database compatibility level 130, these show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values. Per ripristinare il comportamento di conversione precedente, impostare il livello di compatibilità del database su 120 o un livello inferiore.To restore previous conversion behavior, set the database compatibility level to 120 or lower.

Di seguito sono elencati esempi di modifiche di rilievo non protette dal livello di compatibilità:Examples of breaking changes not protected by compatibility level are:

  • Nomi di colonna modificati in oggetti di sistema.Changed column names in system objects. In SQL Server 2012 (11.x)SQL Server 2012 (11.x) la colonna single_pages_kb in sys.dm_os_sys_info è rinominata in 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. Indipendentemente dal livello di compatibilità, la query SELECT single_pages_kb FROM sys.dm_os_sys_info genererà l'errore 207 (nome di colonna non valido).Regardless of the compatibility level, the query SELECT single_pages_kb FROM sys.dm_os_sys_info will produce error 207 (Invalid column name).
  • Oggetti di sistema rimossi.Removed system objects. In SQL Server 2012 (11.x)SQL Server 2012 (11.x) la store procedure sp_dboption è rimossa.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) the sp_dboption was removed. Indipendentemente dal livello di compatibilità, l'istruzione EXEC sp_dboption 'AdventureWorks2016', 'autoshrink', 'FALSE'; genererà l'errore 2812 (Impossibile trovare la stored procedure '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').

Per altre informazioni sulle modifiche di rilievo, vedere Modifiche di rilievo apportate alle funzionalità del motore di database in SQL Server 2017, Modifiche di rilievo apportate alle funzionalità del motore di database in SQL Server 2016, Modifiche di rilievo apportate alle funzionalità del motore di database in SQL Server 2014 e Modifiche di rilievo apportate alle funzionalità del motore di database in 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.

Procedure consigliate per aggiornare il livello di compatibilità del databaseBest Practices for upgrading Database Compatibility Level

Per il flusso di lavoro consigliato per l'aggiornamento del livello di compatibilità, vedere Modificare la modalità di compatibilità del database e usare il Query Store.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and Use the Query Store. Inoltre, per un'esperienza assistita con l'aggiornamento del livello di compatibilità del database, vedere Aggiornamento di database mediante l'Assistente ottimizzazione query.Additionally, for an assisted experience with upgrading the database compatibility level, see Upgrading Databases by using the Query Tuning Assistant.

Livelli di compatibilità e stored procedureCompatibility Levels and Stored Procedures

Quando si esegue una stored procedure, viene utilizzato il livello di compatibilità corrente del database in cui la procedura è definita.When a stored procedure executes, it uses the current compatibility level of the database in which it is defined. Se si modifica l'impostazione di compatibilità di un database, tutte le relative stored procedure vengono ricompilate automaticamente al fine di riflettere tale modifica.When the compatibility setting of a database is changed, all of its stored procedures are automatically recompiled accordingly.

Differenze tra il livello di compatibilità 140 e 150Differences Between Compatibility Level 140 and Level 150

In questa sezione vengono descritti i nuovi comportamenti introdotti con il livello di compatibilità 150.This section describes new behaviors introduced with compatibility level 150.

Il livello di compatibilità del database 150 è attualmente in anteprima pubblica per Database SQL di AzureAzure SQL Database e SQL Server 2019SQL Server 2019.Database compatibility level 150 is currently in Public Preview for Database SQL di AzureAzure SQL Database and SQL Server 2019SQL Server 2019. Questo livello di compatibilità del database verrà associato alla prossima generazione di miglioramenti per l'elaborazione delle query, in aggiunta a quelli introdotti per il livello di compatibilità 140.This database compatibility level will be associated with the next generation of query processing improvements beyond what was introduced in database compatibility level 140.

Livello di compatibilità 140 o inferioreCompatibility-level setting of 140 or lower Livello di compatibilità 150Compatibility-level setting of 150
I carichi di lavoro analitici e per data warehouse relazionali potrebbero non essere in grado di sfruttare gli indici columnstore a causa dell'overhead OLTP, della mancanza di supporto dei fornitori o di altre limitazioni.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. Senza gli indici columnstore, questi carichi di lavoro non possono trarre vantaggio dalla modalità di esecuzione batch.Without columnstore indexes, these workloads cannot benefit from batch execution mode. La modalità di esecuzione batch è ora disponibile per i carichi di lavoro analitici senza richiedere indici columnstore.Batch execution mode is now available for analytic workloads without requiring columnstore indexes. Per altre informazioni, vedere Modalità batch per rowstore.For more information, see batch mode on rowstore.
Le query in modalità riga per le quali sono necessarie concessioni di memoria di dimensioni insufficienti che causano distribuzioni su disco possono essere problematiche su esecuzioni consecutive.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Le query in modalità riga per le quali sono necessarie concessioni di memoria di dimensioni insufficienti che causano distribuzioni su disco possono evidenziare miglioramenti in termini di prestazioni su esecuzioni consecutive.Row-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Per altre informazioni, vedere Feedback delle concessioni di memoria in modalità riga.For more information, see row mode memory grant feedback.
Le query in modalità riga per le quali sono necessarie concessioni di memoria di dimensioni eccessive che causano problemi di concorrenza possono essere problematiche su esecuzioni consecutive.Row-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Le query in modalità riga per le quali sono necessarie concessioni di memoria di dimensioni eccessive che causano problemi di concorrenza possono evidenziare miglioramenti in termini di concorrenza su esecuzioni consecutive.Row-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Per altre informazioni, vedere Feedback delle concessioni di memoria in modalità riga.For more information, see row mode memory grant feedback.
Le query che fanno riferimento a funzioni definite dall'utente scalari T-SQL useranno la chiamata iterativa, senza calcolo dei costi e con esecuzione seriale imposta.Queries referencing T-SQL scalar UDFs will use iterative invocation, lack costing and force serial execution. Le funzioni definite dall'utente scalari T-SQL vengono trasformate in espressioni relazionali equivalenti che vengono rese inline nella query chiamante, ottenendo spesso significativi miglioramenti delle prestazioni.T-SQL scalar UDFs are transformed into equivalent relational expressions that are “inlined” into the calling query, often resulting in significant performance gains. Per altre informazioni, vedere Inlining di funzioni definite dall'utente scalari T-SQL.For more information, see T-SQL scalar UDF inlining.
Le variabili di tabella usano un'ipotesi fissa per la stima della cardinalità.Table variables use a fixed guess for the cardinality estimate. Se il numero effettivo di righe è molto superiore al valore ipotizzato, possono esserci effetti negativi sulle prestazioni delle operazioni downstream.If the actual number of rows is much higher than the guessed value, performance of downstream operations can suffer. I nuovi piani useranno la cardinalità effettiva della variabile tabella rilevata nella prima compilazione invece di una stima fissa.New plans will use the actual cardinality of the table variable encountered on first compilation instead of a fixed guess. Per altre informazioni, vedere Compilazione posticipata delle variabili di tabella.For more information, see table variable deferred compilation.

Per altre informazioni sulle funzionalità di elaborazione delle query abilitate nel livello di compatibilità del database 150, vedere Novità di SQL Server 2019 ed Elaborazione di query intelligenti nei database 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.

Differenze tra il livello di compatibilità 130 e 140Differences Between Compatibility Level 130 and Level 140

In questa sezione vengono descritti i nuovi comportamenti introdotti con il livello di compatibilità 140.This section describes new behaviors introduced with compatibility level 140.

Livello di compatibilità 130 o inferioreCompatibility-level setting of 130 or lower Livello di compatibilità 140Compatibility-level setting of 140
Le stime della cardinalità per istruzioni che fanno riferimento a funzioni composte da più istruzioni con valori di tabella usano un'ipotesi a riga fissa.Cardinality estimates for statements referencing multi-statement table-valued functions use a fixed row guess. Le stime della cardinalità per istruzioni idonee che fanno riferimento a funzioni composte da più istruzioni con valori di tabella usano la cardinalità effettiva dell'output della funzione.Cardinality estimates for eligible statements referencing multi-statement table-valued functions will use the actual cardinality of the function output. Questo comportamento è abilitato dall'esecuzione interleaved per funzioni composte da più istruzioni con valori di tabella.This is enabled via interleaved execution for multi-statement table-valued functions.
Le query in modalità batch per le quali sono necessarie concessioni di memoria di dimensioni insufficienti che causano distribuzioni su disco possono essere problematiche su esecuzioni consecutive.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. Le query in modalità batch per le quali sono necessarie concessioni di memoria di dimensioni insufficienti che causano distribuzioni su disco possono evidenziare miglioramenti in termini di prestazioni su esecuzioni consecutive.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. Questo comportamento è abilitato tramite i commenti della concessione di memoria della modalità batch che aggiornerà le dimensioni della concessione di memoria di un piano memorizzato nella cache se si sono verificate distribuzioni per gli operatori della modalità batch.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.
Le query in modalità batch per le quali sono necessarie concessioni di memoria di dimensioni eccessive che causano problemi di concorrenza possono essere problematiche su esecuzioni consecutive.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. Le query in modalità batch per le quali sono necessarie concessioni di memoria di dimensioni eccessive che causano problemi di concorrenza possono evidenziare miglioramenti in termini di concorrenza su esecuzioni consecutive.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. Questo comportamento è abilitato tramite i commenti della concessione di memoria della modalità batch che aggiornerà le dimensioni della concessione di memoria di un piano memorizzato nella cache se inizialmente era richiesta una memoria di dimensioni eccessive.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.
Le query in modalità batch contenenti operatori di join sono idonee per tre algoritmi di join fisico, tra cui join annidato dei cicli, hash join e merge join.Batch-mode queries that contain join operators are eligible for three physical join algorithms, including nested loop, hash join and merge join. Se le stime della cardinalità non sono corrette per gli input di join, può essere selezionato un algoritmo di join non appropriato.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. In questo caso le prestazioni ne risentiranno e l'algoritmo di join non appropriato rimarrà in uso fino alla ricompilazione del piano memorizzato nella cache.If this occurs, performance will suffer and the inappropriate join algorithm will remain in use until the cached plan is recompiled. Esiste un operatore di join aggiuntivo denominato join adattivo.There is an additional join operator called adaptive join. Se le stime della cardinalità non sono corrette per l'input dell'outer join di compilazione, può essere selezionato un algoritmo di join non appropriato.If cardinality estimates are incorrect for the outer build join input, an inappropriate join algorithm may be selected. In questo caso e se l'istruzione è idonea per un join adattivo, verranno usati in modo dinamico un join annidato dei cicli per gli input di join più piccoli e un hash join per gli input di join più grandi senza richiedere la ricompilazione.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.
I piani semplici che fanno riferimento agli indici Columnstore non sono idonei per l'esecuzione in modalità batch.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Un piano semplice che fa riferimento agli indici Columnstore sarà eliminato e sostituito da un piano idoneo per l'esecuzione in modalità batch.A trivial plan referencing Columnstore indexes will be discarded in favor of a plan that is eligible for batch mode execution.
L'operatore UDX sp_execute_external_script può essere eseguito solo in modalità riga.The sp_execute_external_script UDX operator can only run in row mode. L'operatore UDX sp_execute_external_script è idoneo per l'esecuzione in modalità batch.The sp_execute_external_script UDX operator is eligible for batch mode execution.
Le funzioni composte da più istruzioni con valori di tabella non presentano un'esecuzione interleavedMulti-statement table-valued functions (TVF's) do not have interleaved execution Esecuzione interleaved per funzioni con valori di tabella con istruzioni multiple per migliorare la qualità del piano.Interleaved execution for multi-statement TVFs to improve plan quality.

Le correzioni nel flag di traccia 4199 delle versioni precedenti di SQL Server precedenti a SQL Server 2017 sono ora abilitate per impostazione predefinita.Fixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. Con la modalità di compatibilità 140,With compatibility mode 140. il flag di traccia 4199 continuerà a essere applicabile alle nuove correzioni di Query Optimizer rilasciate dopo SQL Server 2017.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2017. Per informazioni sul flag di traccia 4199, vedere Flag di traccia 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Differenze tra i livelli di compatibilità 120 e 130Differences Between Compatibility Level 120 and Level 130

In questa sezione vengono descritti i nuovi comportamenti introdotti con il livello di compatibilità 130.This section describes new behaviors introduced with compatibility level 130.

Livello di compatibilità 120 o inferioreCompatibility-level setting of 120 or lower Livello di compatibilità 130Compatibility-level setting of 130
INSERT in un'istruzione INSERT-SELECT è a thread singolo.The INSERT in an INSERT-SELECT statement is single-threaded. INSERT in un'istruzione INSERT-SELECT è multithread o può avere un piano parallelo.The INSERT in an INSERT-SELECT statement is multi-threaded or can have a parallel plan.
Le query in una tabella ottimizzata per la memoria vengono eseguite a thread singolo.Queries on a memory-optimized table execute single-threaded. Le query in una tabella ottimizzata per la memoria ora possono avere piani paralleli.Queries on a memory-optimized table can now have parallel plans.
Introduzione della stima di cardinalità di SQL 2014 CardinalityEstimationModelVersion="120"Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" Miglioramenti della stima di cardinalità grazie al modello di stima di cardinalità 130, visibile da un piano di query.Further cardinality estimation (CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion="130"CardinalityEstimationModelVersion="130"
Modifiche in modalità batch e modifiche in modalità riga con indici Columnstore:Batch mode versus Row Mode changes with Columnstore indexes:
  • Gli ordinamenti in una tabella con indice Columnstore sono in modalità rigaSorts on a table with Columnstore index are in Row mode
  • Le aggregazioni di funzioni finestra sono usate in modalità riga, ad esempio LAG o LEADWindowing function aggregates operate in row mode such as LAG or LEAD
  • Le query su tabelle Columnstore con più clausole Distinct sono usate in modalità rigaQueries on Columnstore tables with Multiple distinct clauses operated in Row mode
  • Le query in esecuzione con MAXDOP 1 o con un piano seriale sono usate in modalità rigaQueries running under MAXDOP 1 or with a serial plan executed in Row mode
Modifiche in modalità batch e modifiche in modalità riga con indici Columnstore:Batch mode versus Row Mode changes with Columnstore indexes:
  • Gli ordinamenti in una tabella con indice Columnstore sono ora in modalità rigaSorts on a table with a Columnstore index are now in batch mode
  • Le aggregazioni di funzioni finestra sono ora usate in modalità batch, ad esempio LAG o LEADWindowing aggregates now operate in batch mode such as LAG or LEAD
  • Le query su tabelle Columnstore con più clausole Distinct sono usate in modalità batchQueries on Columnstore tables with Multiple distinct clauses operate in Batch mode
  • Le query in esecuzione con MAXDOP 1 o con un piano seriale vengono eseguite in modalità batchQueries running under MAXDOP 1 or with a serial plan execute in Batch Mode
Le statistiche vengono aggiornate automaticamente.Statistics can be automatically updated. La logica su cui si basa l'aggiornamento automatico delle statistiche è più aggressiva in tabelle di grandi dimensioni.The logic which automatically updates statistics is more aggressive on large tables. In pratica, si dovrebbero ridurre i casi in cui i clienti registrano problemi di prestazioni in termini di quey laddove le righe appena inserite vengono frequentemente sottoposte a query senza però che le statistiche siano state ancora aggiornate con i valori attuali.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 traccia 2371 è disattivata per impostazione predefinita in 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 traccia 2371 è attivata per impostazione predefinita in 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). Il flag di traccia 2371 indica allo strumento di aggiornamento delle statistiche automatico di prendere come esempio un subset di righe più piccolo ma più idoneo, in una tabella con un elevato numero di righe.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.

Al fine di un miglioramento, è possibile includere nell'esempio più righe rispetto a quelle che sono state inserite di recente.One improvement is to include in the sample more rows that were inserted recently.

Un altro miglioramento prevede di eseguire le query, anziché bloccarle, nello stesso momento in cui viene eseguito il processo di aggiornamento delle statistiche.Another improvement is to let queries run while the update statistics process is running, rather than blocking the query.
Per il livello 120, le statistiche vengono campionate da un processo a threaded singolo.For level 120, statistics are sampled by a single-threaded process. Per il livello 130, le statistiche vengono campionate da un processo a threaded multiplo.For level 130, statistics are sampled by a multi-threaded process.
253 è il limite di chiavi esterne in ingresso.253 incoming foreign keys is the limit. A una tabella possono fare riferimento fino a 10.000 chiavi esterne in ingresso o riferimenti simili.A given table can be referenced by up to 10,000 incoming foreign keys or similar references. Per informazioni sulle restrizioni, vedere Create Foreign Key Relationships.For restrictions, see Create Foreign Key Relationships.
Gli algoritmi di join hash MD2, MD4, MD5, SHA e SHA1 sono consentiti.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. Sono consentiti solo gli algoritmi di join hash SHA2_256 e SHA2_512.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
SQL Server 2016 (13.x)SQL Server 2016 (13.x) include miglioramenti in alcune conversioni di tipi di dati e alcune operazioni (in genere non comuni).includes improvements in some data types conversions and some (mostly uncommon) operations. Per informazioni dettagliate, vedere Miglioramenti di SQL Server 2016 relativi alla gestione di alcuni tipi di dati e operazioni non comuni.For details see SQL Server 2016 improvements in handling some data types and uncommon operations.
La funzione STRING_SPLIT non è disponibile.The STRING_SPLIT function is not available. La funzione STRING_SPLIT è disponibile nel livello di compatibilità 130 o superiore.The STRING_SPLIT function is available under compatibility level 130 or above. Se il livello di compatibilità del database è inferiore a 130, SQL ServerSQL Server non sarà in grado di trovare ed eseguire la funzione 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.

Le correzioni nel flag di traccia 4199 delle versioni precedenti di SQL ServerSQL Server precedenti a SQL Server 2016 (13.x)SQL Server 2016 (13.x) sono ora abilitate per impostazione predefinita.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. Con la modalità di compatibilità 130,With compatibility mode 130. il flag di traccia 4199 continuerà a essere applicabile alle nuove correzioni di Query Optimizer rilasciate dopo 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). Per usare la versione precedente di Query Optimizer in Database SQLSQL Database è necessario selezionare il livello di compatibilità 110.To use the older query optimizer in Database SQLSQL Database you must select compatibility level 110. Per informazioni sul flag di traccia 4199, vedere Flag di traccia 4199.For information about Trace Flag 4199, see Trace Flag 4199.

Differenze tra i livelli di compatibilità inferiori e il livello 120Differences Between Lower Compatibility Levels and Level 120

Questa sezione descrive i nuovi comportamenti introdotti con il livello di compatibilità 120.This section describes new behaviors introduced with compatibility level 120.

Livello di compatibilità 110 o inferioreCompatibility-level setting of 110 or lower Livello di compatibilità 120Compatibility-level setting of 120
Viene utilizzata la versione precedente di Query Optimizer.The older query optimizer is used. SQL Server 2014 (12.x)SQL Server 2014 (12.x) include miglioramenti sostanziali al componente per la creazione e l'ottimizzazione dei piani di query.includes substantial improvements to the component that creates and optimizes query plans. Questa nuova funzionalità di Query Optimizer dipende dall'utilizzo del livello di compatibilità del database 120.This new query optimizer feature is dependent upon use of the database compatibility level 120. Per sfruttare al meglio questi miglioramenti, sarebbe opportuno sviluppare le nuove applicazioni di database utilizzando il livello di compatibilità del database 120.New database applications should be developed using database compatibility level 120 to take advantage of these improvements. Le applicazioni di cui si esegue la migrazione da versioni precedenti di SQL ServerSQL Server devono essere testate con attenzione per assicurarsi che le prestazioni vengano mantenute o migliorate.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 si verifica un calo delle prestazioni, è possibile impostare il livello di compatibilità del database su 110 o su un valore inferiore per utilizzare la metodologia precedente di Query Optimizer.If performance degrades, you can set the database compatibility level to 110 or earlier to use the older query optimizer methodology.

Il livello di compatibilità 120 del database utilizza un nuovo strumento di stima della cardinalità ottimizzato per i carichi di lavoro OLTP e di data warehouse più recenti.Database compatibility level 120 uses a new cardinality estimator that is tuned for modern data warehousing and OLTP workloads. Prima di impostare il livello di compatibilità del database su 110 a causa di problemi di prestazioni, vedere le indicazioni riportate nella sezione Piani di query dell'argomento Novità del motore di database di SQL Server 2014 (12.x)SQL Server 2014 (12.x).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.
Nei livelli di compatibilità inferiori a 120, l'impostazione della lingua viene ignorata durante la conversione di un valore date in un valore stringa.In compatibility levels lower than 120, the language setting is ignored when converting a date value to a string value. Si noti che questo comportamento è specifico solo del tipo date.Note that this behavior is specific only to the date type. Vedere l'esempio B nella sezione Esempi riportata più avanti.See example B in the Examples section below. L'impostazione della lingua non viene ignorata durante la conversione di un valore date in un valore stringa.The language setting is not ignored when converting a date value to a string value.
I riferimenti ricorsivi a destra di una clausola EXCEPT creano un ciclo infinito.Recursive references on the right-hand side of an EXCEPT clause create an infinite loop. L'esempio C nella sezione Esempi riportata più avanti illustra questo comportamento.Example C in the Examples section below demonstrates this behavior. I riferimenti ricorsivi in una clausola EXCEPT generano un errore in conformità allo standard ANSI SQL.Recursive references in an EXCEPT clause generates an error in compliance with the ANSI SQL standard.
L'espressione di tabella comune (CTE) ricorsiva consente l'uso di nomi colonna duplicati.Recursive common table expression (CTE) allows duplicate column names. Una CTE ricorsiva non consente nomi di colonna duplicati.Recursive CTE does not allow duplicate column names.
I trigger disabilitati vengono abilitati se i trigger vengono modificati.Disabled triggers are enabled if the triggers are altered. La modifica di un trigger non cambia lo stato (abilitato o disabilitato) del trigger.Altering a trigger does not change the state (enabled or disabled) of the trigger.
La clausola della tabella OUTPUT INTO ignora IDENTITY_INSERT SETTING = OFF e consente l'inserimento di valori espliciti.The OUTPUT INTO table clause ignores the IDENTITY_INSERT SETTING = OFF and allows explicit values to be inserted. Non è possibile inserire valori espliciti per un colonna Identity in una tabella se IDENTITY_INSERT è impostato su OFF.You cannot insert explicit values for an identity column in a table when IDENTITY_INSERT is set to OFF.
Quando il contenimento del database è impostato su parziale, la convalida del campo $action nella clausola OUTPUT di un'istruzione MERGE può restituire un errore nelle regole di confronto.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. Le regole di confronto dei valori restituiti dalla clausola $action di un'istruzione MERGE sono le regole di confronto del database anziché le regole di confronto del server e non viene restituito alcun errore di conflitto tra regole di confronto.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.
Tramite un'istruzione SELECT INTO viene sempre creata un'operazione di inserimento a thread singolo.A SELECT INTO statement always creates a single-threaded insert operation. Tramite un'istruzione SELECT INTO è possibile creare un'operazione di inserimento parallela.A SELECT INTO statement can create a parallel insert operation. Quando si inserisce un numero elevato di righe, con un'operazione parallela è possibile migliorare le prestazioni.When inserting a large number of rows, the parallel operation can improve performance.

Differenze tra i livelli di compatibilità inferiori e i livelli 100 e 110Differences Between Lower Compatibility Levels and Levels 100 and 110

Questa sezione descrive i nuovi comportamenti introdotti con il livello di compatibilità 110.This section describes new behaviors introduced with compatibility level 110. Questa sezione si applica anche ai livelli di compatibilità superiori a 110.This section also applies to compatibility levels above 110.

Livello di compatibilità 100 o inferioreCompatibility-level setting of 100 or lower Impostazione del livello di compatibilità 110 o inferioreCompatibility-level setting of at least 110
Gli oggetti di database CLR (Common Language Runtime) vengono eseguiti con la versione 4 di CLR.Common language runtime (CLR) database objects are executed with version 4 of the CLR. Non sono tuttavia presenti alcune modifiche del comportamento introdotte con la versione 4 di CLR.However, some behavior changes introduced in version 4 of the CLR are avoided. Per altre informazioni, vedere Novità dell'integrazione CLR.For more information, see What's New in CLR Integration. Gli oggetti di database CLR vengono eseguiti con la versione 4 di CLR.CLR database objects are executed with version 4 of the CLR.
Le funzioni XQuery string-length e substring considerano ogni surrogato come due caratteri.The XQuery functions string-length and substring count each surrogate as two characters. Le funzioni XQuery string-length e substring considerano ogni surrogato come un carattere.The XQuery functions string-length and substring count each surrogate as one character.
La parola chiave PIVOT è consentita in una query ricorsiva dell'espressione di tabella comune.PIVOT is allowed in a recursive common table expression (CTE) query. La query tuttavia restituisce risultati non corretti quando sono presenti più righe per raggruppamento.However, the query returns incorrect results when there are multiple rows per grouping. La parola chiave PIVOT non è consentita in una query ricorsiva dell'espressione di tabella comune.PIVOT is not allowed in a recursive common table expression (CTE) query. Viene restituito un errore.An error is returned.
L'algoritmo RC4 è supportato solo per motivi di compatibilità con le versioni precedenti.The RC4 algorithm is only supported for backward compatibility. È possibile crittografare il nuovo materiale usando RC4 o RC4_128 solo quando il livello di compatibilità del database è 90 o 100.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Non consigliato.) In SQL Server 2012 (11.x)SQL Server 2012 (11.x) il materiale crittografato utilizzando RC4 o RC4_128 può essere decrittografato in qualsiasi livello di compatibilità.(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. Il nuovo materiale non può essere crittografato utilizzando RC4 o RC4_128.New material cannot be encrypted using RC4 or RC4_128. Usare un algoritmo più recente, ad esempio uno degli algoritmi AES.Use a newer algorithm such as one of the AES algorithms instead. In SQL Server 2012 (11.x)SQL Server 2012 (11.x) il materiale crittografato utilizzando RC4 o RC4_128 può essere decrittografato in qualsiasi livello di compatibilità.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.
Lo stile predefinito per le operazioni CAST e CONVERT sui tipi di dati time e datetime2 è 121, tranne quando uno dei due tipi viene usato in un'espressione della colonna calcolata.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. Per le colonne calcolate, lo stile predefinito è 0.For computed columns, the default style is 0. Questo comportamento influisce sulle colonne calcolate quando vengono create o usate nelle query con parametrizzazione automatica o nelle definizioni dei vincoli.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

L'esempio D nella sezione Esempi riportata più avanti illustra la differenza tra gli stili 0 e 121.Example D in the Examples section below shows the difference between styles 0 and 121. Non viene illustrato il comportamento descritto sopra.It does not demonstrate the behavior described above. Per altre informazioni sugli stili di data e ora, vedere CAST e CONVERT.For more information about date and time styles, see CAST and CONVERT.
Con il livello di compatibilità 110, lo stile predefinito per CAST e CONVERT sui tipi di dati 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 la query si basa sul comportamento obsoleto, usare un livello di compatibilità inferiore a 110 oppure specificare in modo esplicito lo stile 0 nella query interessata.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.

L'aggiornamento del database al livello di compatibilità 110 non comporta la modifica dei dati utente archiviati su disco.Upgrading the database to compatibility level 110 will not change user data that has been stored to disk. È necessario correggere manualmente questi dati nel modo opportuno.You must manually correct this data as appropriate. Se ad esempio si usa SELECT INTO per creare una tabella da un'origine che contiene un'espressione della colonna calcolata descritta in precedenza, verranno archiviati i dati (con stile 0), anziché la definizione della colonna calcolata.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. Sarà necessario aggiornare manualmente questi dati in base allo stile 121.You would need to manually update this data to match style 121.
Per tutte le colonne delle tabelle remote di tipo smalldatetime a cui viene fatto riferimento in una vista partizionata viene eseguito il mapping come datetime.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime. Le colonne corrispondenti delle tabelle locali, ovvero le colonne che occupano la stessa posizione ordinale nell'elenco di selezione, devono essere di tipo datetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type datetime. Per tutte le colonne delle tabelle remote di tipo smalldatetime a cui viene fatto riferimento in una vista partizionata viene eseguito il mapping come smalldatetime.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. Le colonne corrispondenti delle tabelle locali, ovvero le colonne che occupano la stessa posizione ordinale nell'elenco di selezione, devono essere di tipo smalldatetime.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type smalldatetime.

Dopo aver effettuato l'aggiornamento al livello di compatibilità 110, la vista partizionata distribuita avrà esito negativo poiché i tipi di dati non corrisponderanno.After upgrading to 110, the distributed partitioned view will fail because of the data type mismatch. È possibile risolvere questo problema impostando il tipo di dati nella tabella remota su datetime o impostando il livello di compatibilità del database locale su 100 o su un valore inferiore.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.
Tramite la funzione SOUNDEX vengono implementate le regole seguenti:SOUNDEX function implements the following rules:

1) La H o W maiuscola viene ignorata se separa due consonanti aventi lo stesso numero nel codice 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 il numero dei primi 2 caratteri di character_expression è uguale nel codice SOUNDEX, entrambi i caratteri vengono inclusi.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. Altrimenti, se il numero di un set di consonanti affiancate è uguale nel codice SOUNDEX, vengono escluse tutte le consonanti eccetto la prima.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.
Tramite la funzione SOUNDEX vengono implementate le regole seguenti:SOUNDEX function implements the following rules:

1) Se la H o W maiuscola separa due consonanti aventi lo stesso numero nel codice SOUNDEX, la consonante a destra viene ignorata1) 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 il numero di un set di consonanti affiancate è uguale nel codice SOUNDEX, vengono escluse tutte le consonanti eccetto la prima.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.



Le regole aggiuntive potrebbero generare una differenza tra i valori calcolati dalla funzione SOUNDEX e quelli calcolati con livelli di compatibilità precedenti.The additional rules may cause the values computed by the SOUNDEX function to be different than the values computed under earlier compatibility levels. Dopo aver eseguito l'aggiornamento al livello di compatibilità 110, potrebbe essere necessario ricompilare gli indici, gli heap o i vincoli CHECK in cui viene usata la funzione SOUNDEX.After upgrading to compatibility level 110, you may need to rebuild the indexes, heaps, or CHECK constraints that use the SOUNDEX function. Per altre informazioni, vedere SOUNDEX.For more information, see SOUNDEX.

Differenze tra i livelli di compatibilità 90 e 100Differences Between Compatibility Level 90 and Level 100

In questa sezione vengono descritti i nuovi comportamenti introdotti con il livello di compatibilità 100.This section describes new behaviors introduced with compatibility level 100.

Livello di compatibilità 90Compatibility-level setting of 90 Livello di compatibilità 100Compatibility-level setting of 100 Probabilità di impattoPossibility of impact
L'impostazione QUOTED_IDENTIFER è sempre impostata su ON per le funzioni con valori di tabella composte da più istruzioni quando tali funzioni vengono create indipendentemente dall'impostazione del livello di sessione.The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting. L'impostazione della sessione QUOTED IDENTIFIER viene applicata quando vengono create funzioni con valori di tabella composte da più istruzioni.The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created. MediaMedium
Quando si crea o si modifica una funzione di partizione, i valori letterali datetime e smalldatetime nella funzione vengono valutati presupponendo che l'impostazione della lingua sia US_English.When you create or alter a partition function, datetime and smalldatetime literals in the function are evaluated assuming US_English as the language setting. L'impostazione della lingua corrente viene usata per valutare i valori letterali datetime e smalldatetime nella funzione di partizione.The current language setting is used to evaluate datetime and smalldatetime literals in the partition function. MediaMedium
La clausola FOR BROWSE è consentita (e ignorata) nelle istruzioni INSERT e SELECT INTO.The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements. La clausola FOR BROWSE non è consentita nelle istruzioni INSERT e SELECT INTO.The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements. MediaMedium
Nella clausola OUTPUT sono consentiti predicati full-text.Full-text predicates are allowed in the OUTPUT clause. Nella clausola OUTPUT non sono consentiti predicati full-text.Full-text predicates are not allowed in the OUTPUT clause. BassaLow
Le istruzioni CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST e DROP FULLTEXT STOPLIST non sono supportate.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. Per impostazione predefinita, ai nuovi indici full-text viene associato automaticamente l'elenco di parole non significative di sistema.The system stoplist is automatically associated with new full-text indexes. Le istruzioni CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST e DROP FULLTEXT STOPLIST sono supportate.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. BassaLow
L'istruzione MERGE non viene applicata come parola chiave riservata.MERGE is not enforced as a reserved keyword. MERGE è una parola chiave completamente riservata.MERGE is a fully reserved keyword. L'istruzione MERGE è supportata con i livelli di compatibilità 100 e 90.The MERGE statement is supported under both 100 and 90 compatibility levels. BassaLow
Se si usa l'argomento <dml_table_source> dell'istruzione INSERT, viene generato un errore di sintassi.Using the <dml_table_source> argument of the INSERT statement raises a syntax error. È possibile acquisire i risultati di una clausola OUTPUT in un'istruzione INSERT, UPDATE, DELETE o MERGE nidificata e inserire tali risultati in una vista o tabella di destinazione.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. A tale scopo, usare l'argomento <dml_table_source> dell'istruzione INSERT.This is done using the <dml_table_source> argument of the INSERT statement. BassaLow
A meno che non sia specificato NOINDEX, DBCC CHECKDB o DBCC CHECKTABLE esegue controlli di consistenza sia fisica sia logica in una singola tabella o vista indicizzata e in tutti i relativi indici non cluster 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. Gli indici spaziali non sono supportati.Spatial indexes are not supported. A meno che non sia specificato NOINDEX, DBCC CHECKDB o DBCC CHECKTABLE esegue controlli di consistenza sia fisica sia logica in una singola tabella e in tutti i relativi indici non cluster.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. Per impostazione predefinita, tuttavia, negli indici XML, negli indici spaziali e nelle viste indicizzate vengono eseguiti solo controlli di consistenza fisica.However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.

Se è specificato WITH EXTENDED_LOGICAL_CHECKS, vengono eseguiti controlli logici su viste indicizzate, indici XML e indici spaziali, laddove presenti.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. Per impostazione predefinita, i controlli di consistenza fisica vengono eseguiti prima di quelli di consistenza logica.By default, physical consistency checks are performed before the logical consistency checks. Se viene specificato anche NOINDEX, vengono eseguiti solo i controlli logici.If NOINDEX is also specified, only the logical checks are performed.
BassaLow
Quando una clausola OUTPUT viene utilizzata con un'istruzione DML (Data Manipulation Language) e si verifica un errore di run-time durante l'esecuzione di istruzioni, l'intera transazione viene terminata e ne viene eseguito il rollback.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 una clausola OUTPUT viene usata con un'istruzione DML (Data Manipulation Language) e si verifica un errore di runtime durante l'esecuzione delle istruzioni, il comportamento dipende dall'impostazione di 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 è impostato su OFF, un errore di interruzione dell'istruzione generato dall'istruzione DML tramite la clausola OUTPUT terminerà l'istruzione, ma l'esecuzione del batch continuerà e non verrà eseguito il rollback della transazione.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 è impostato su ON, tutti gli errori di runtime generati dall'istruzione DML tramite la clausola OUTPUT termineranno il batch e verrà eseguito il rollback della transazione.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. BassaLow
CUBE e ROLLUP non vengono applicate come parole chiave riservate.CUBE and ROLLUP are not enforced as reserved keywords. CUBE e ROLLUP sono parole chiave riservate all'interno della clausola GROUP BY.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. BassaLow
Agli elementi del tipo anyType XML viene applicata una convalida di tipo strict.Strict validation is applied to elements of the XML anyType type. Agli elementi del tipo anyType viene applicata una convalida di tipo lax.Lax validation is applied to elements of the anyType type. Per altre informazioni, vedere Componenti jolly e convalida del contenuto.For more information, see Wildcard Components and Content Validation. BassaLow
Non è possibile eseguire query sugli attributi speciali xsi:nil e xsi:type, né modificarli tramite istruzioni DML.The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.

Di conseguenza, /e/@xsi:nil ha esito negativo, mentre /e/@* ignora gli attributi xsi:nil e xsi:type.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. /e restituisce tuttavia gli attributi xsi:nil e xsi:type per la consistenza con SELECT xmlCol, anche se xsi:nil = "false".However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
Gli attributi speciali xsi:nil e xsi:type vengono archiviati come attributi regolari e possono essere sottoposti a query o modificati.The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.

L'esecuzione della query SELECT x.query('a/b/@*') restituisce ad esempio tutti gli attributi, inclusi xsi:nil e xsi:type.For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. Per escludere questi tipi nella query, sostituire @* con @*[namespace-uri(.) != "insert xsi namespace uri" e non (local-name(.) = "type" o 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".
BassaLow
Una funzione definita dall'utente che converte un valore stringa costante XML in un tipo datetime di SQL ServerSQL Server viene contrassegnata come deterministica.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as deterministic. Una funzione definita dall'utente che converte un valore stringa costante XML in un tipo datetime di SQL ServerSQL Server viene contrassegnata come non deterministica.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as non-deterministic. BassaLow
I tipi unione ed elenco XML non sono supportati completamente.The XML union and list types are not fully supported. I tipi unione ed elenco sono supportati completamente, incluse le funzionalità seguenti.The union and list types are fully supported including the following functionality:

Unione di elencoUnion of list

Unione di unioneUnion of union

Elenco di tipi atomiciList of atomic types

Elenco di unioneList of union
BassaLow
Le opzioni SET necessarie per un metodo xQuery non vengono convalidate quando il metodo è contenuto in una vista o in una funzione inline con valori di tabella.The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function. Le opzioni SET necessarie per un metodo xQuery vengono convalidate quando il metodo è contenuto in una vista o in una funzione inline con valori di tabella.The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. Se le opzioni SET del metodo non sono impostate correttamente, viene generato un errore.An error is raised if the SET options of the method are set incorrectly. BassaLow
I valori di attributo XML contenenti caratteri di fine riga (ritorno a capo e avanzamento riga) non vengono normalizzati in base allo standard XML,XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. ovvero vengono restituiti entrambi i caratteri anziché un singolo carattere di avanzamento riga.That is, both characters are returned instead of a single line-feed character. I valori di attributo XML contenenti caratteri di fine riga (ritorno a capo e avanzamento riga) vengono normalizzati in base allo standard XML,XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. ovvero tutte le interruzioni di riga in entità analizzate esterne (inclusa l'entità del documento) vengono normalizzate in fase di input traducendo sia la sequenza di due caratteri #xD #xA sia qualsiasi carattere #xD non seguito da #XA in un singolo carattere #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.

Le applicazioni che utilizzano attributi per trasportare valori stringa contenenti caratteri di fine riga non riceveranno di nuovo tali caratteri quando questi vengono inviati.Applications that use attributes to transport string values that contain end-of-line characters will not receive these characters back as they are submitted. Per evitare il processo di normalizzazione, utilizzare entità di caratteri numerici XML per codificare tutti i caratteri di fine riga.To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
BassaLow
Le proprietà di colonna ROWGUIDCOL e IDENTITY possono essere erroneamente denominate come vincolo.The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. L'istruzione CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY), ad esempio, viene eseguita correttamente, ma il nome del vincolo non viene mantenuto e non è accessibile per l'utente.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. Le proprietà di colonna ROWGUIDCOL e IDENTITY non possono essere denominate come vincolo.The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. In caso contrario, verrà restituito l'errore 156.Error 156 is returned. BassaLow
L'aggiornamento di colonne con un'assegnazione bidirezionale, ad esempio UPDATE T1 SET @v = column_name = <expression>, può produrre risultati imprevisti, poiché è possibile che durante l'esecuzione dell'istruzione in altre clausole, ad esempio WHERE e ON, venga usato il valore attivo della variabile anziché il valore iniziale dell'istruzione.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. Ciò può comportare una modifica imprevista dei significati dei predicati per ciascuna riga.This can cause the meanings of the predicates to change unpredictably on a per-row basis.

Questo comportamento è applicabile solo quando il livello di compatibilità è impostato su 90.This behavior is applicable only when the compatibility level is set to 90.
L'aggiornamento di colonne tramite un'assegnazione bidirezionale produce i risultati previsti, in quanto durante l'esecuzione dell'istruzione è possibile accedere solo al valore iniziale dell'istruzione per la colonna.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. BassaLow
Vedere l'esempio E nella sezione Esempi riportata più avanti.See example E in the Examples section below. Vedere l'esempio F nella sezione Esempi riportata più avanti.See example F in the Examples section below. BassaLow
La funzione ODBC {fn CONVERT()} utilizza il formato di data predefinito della lingua specifica.The ODBC function {fn CONVERT()} uses the default date format of the language. Per alcune lingue il formato predefinito è AGM, che può comportare errori di conversione quando la funzione CONVERT() è combinata con altre funzioni, ad esempio {fn CURDATE()}, che prevedono l'uso del formato AMG.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 funzione ODBC {fn CONVERT()} usa lo stile 121, un formato AMG indipendente dalla lingua, per la conversione nei tipi di dati 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. BassaLow
Le funzioni intrinseche datetime, ad esempio DATEPART, non richiedono che i valori di input di tipo stringa siano valori letterali datetime validi.Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. Ad esempio, SELECT DATEPART (year, '2007/05-30') viene compilato correttamente.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. Le funzioni intrinseche datetime, ad esempio DATEPART, richiedono che i valori di input di tipo stringa siano valori letterali datetime validi.Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. Quando si utilizza un valore letterale datetime non valido, viene restituito l'errore 241.Error 241 is returned when an invalid datetime literal is used. BassaLow

Parole chiave riservateReserved Keywords

L'impostazione di compatibilità determina anche le parole chiave riservate dal Motore di databaseDatabase Engine.The compatibility setting also determines the keywords that are reserved by the Motore di databaseDatabase Engine. Nella tabella seguente sono elencate le parole chiave riservate introdotte per ogni livello di compatibilità.The following table shows the reserved keywords that are introduced by each of the compatibility levels.

Livello di compatibilitàCompatibility-level setting Parole chiave riservateReserved keywords
130130 Da determinare.To be determined.
120120 Nessuna.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

A un determinato livello di compatibilità, le parole chiave riservate includono tutte le parole chiave introdotte per tale livello e per quelli precedenti.At a given compatibility level, the reserved keywords include all of the keywords introduced at or below that level. Pertanto, ad esempio, per le applicazioni con livello 110 tutte le parole chiave elencate nella tabella precedente sono parole chiave riservate.Thus, for instance, for applications at level 110, all of the keywords listed in the preceding table are reserved. Per i livelli di compatibilità inferiori, le parole chiave del livello 100 rimangono nomi di oggetti validi ma le funzionalità del linguaggio di livello 110 corrispondenti a tale parole chiave non sono disponibili.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 volta introdotta, una parola chiave rimane riservata.Once introduced, a keyword remains reserved. La parola chiave riservata PIVOT, ad esempio, introdotta per il livello di compatibilità 90, è riservata per i livelli 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 per un'applicazione si utilizza un identificatore che rappresenta una parola chiave riservata nel livello di compatibilità relativo, viene generato un errore.If an application uses an identifier that is reserved as a keyword for its compatibility level, the application will fail. In alternativa, racchiudere l'identificatore tra parentesi quadre ( [] ) o virgolette ( "" . Per aggiornare ad esempio un'applicazione che usa l'identificatore EXTERNAL al livello di compatibilità 90, è possibile modificare l'identificatore in [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".

Per altre informazioni, vedere Parole chiave riservate.For more information, see Reserved Keywords.

AutorizzazioniPermissions

È richiesta l'autorizzazione ALTER per il database.Requires ALTER permission on the database.

EsempiExamples

A.A. Modifica del livello di compatibilitàChanging the compatibility level

Nell'esempio seguente il livello di compatibilità del database AdventureWorks2012AdventureWorks2012 viene modificato e impostato su 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

Nell'esempio seguente viene restituito il livello di compatibilità del database corrente.The following example returns the compatibility level of the current database.

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

B.B. L'istruzione SET LANGUAGE viene ignorata tranne con il livello di compatibilità 120Ignoring the SET LANGUAGE statement except under compatibility level 120

Nella query seguente viene ignorata l'istruzione SET LANGUAGE tranne con il livello di compatibilità 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. Per il livello di compatibilità impostato su 110 o un valore inferiore, i riferimenti ricorsivi a destra di una clausola EXCEPT creano un ciclo 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. La differenza tra gli stili 0 e 121The difference between styles 0 and 121

Per altre informazioni sugli stili di data e ora, vedere 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. Assegnazione di variabile - Operatore UNION di livello principaleVariable assignment - top-level UNION operator

L'assegnazione di variabile è consentita in un'istruzione contenente un operatore UNION di livello principale, ma restituisce risultati imprevisti.Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. Nelle istruzioni seguenti, ad esempio, alla variabile locale @v è assegnato il valore della colonna BusinessEntityID dall'unione di due tabelle.For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. Per definizione, quando l'istruzione SELECT restituisce più valori, alla variabile viene assegnato l'ultimo valore restituito.By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. In questo caso, alla variabile viene assegnato correttamente l'ultimo valore, ma viene restituito anche il set di risultati dell'istruzione 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;

L'assegnazione di variabile non è consentita in un'istruzione contenente un operatore UNION di livello principale.Variable assignment is not allowed in a statement containing a top-level UNION operator. In caso contrario, verrà restituito l'errore 10734.Error 10734 is returned. Per risolvere questo errore, riscrivere la query come illustrato nell'esempio seguente.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;

Vedere anche ALTER DATABASESee Also ALTER DATABASE