sp_dbcmptlevel (Transact-SQL)

Imposta aspetti specifici del funzionamento del database in modo che risultino compatibili con la versione precedente di SQL Server.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Non utilizzare questa caratteristica in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata. Utilizzare Livello di compatibilità di ALTER DATABASE.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_dbcmptlevel [ [ @dbname = ] name ] 
    [ , [ @new_cmptlevel = ] version ]

Argomenti

  • [ @dbname= ] name
    Nome del database di cui si desidera modificare il livello di compatibilità. I nomi di database devono essere conformi alle regole per gli identificatori. name è di tipo sysname e il valore predefinito è NULL.

  • [ @new_cmptlevel= ] version
    Versione di SQL Server con cui il database deve risultare compatibile. version è di tipo tinyint e il valore predefinito è NULL. Il valore deve essere uno dei seguenti:

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Se non si specifica alcun parametro oppure si omette il parametro name, la stored procedure sp_dbcmptlevel restituisce un errore.

Se si specifica name senza specificare version, Motore di database restituisce un messaggio in cui viene visualizzato il livello di compatibilità corrente del database specificato.

Osservazioni

Per una descrizione dei livelli di compatibilità, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).

Autorizzazioni

Solo il proprietario del database, i membri del ruolo predefinito del server sysadmin e i membri del ruolo predefinito del database db_owner (se si modifica il database corrente) sono autorizzati a eseguire questa stored procedure.

Esempi

A. Modifica di un database per impostare il livello di compatibilità di SQL Server 2000

Nell'esempio seguente il livello di compatibilità del database AdventureWorks viene modificato e impostato su 80.

EXEC sp_dbcmptlevel AdventureWorks, 80;
GO

B. Effetti del livello di compatibilità su ORDER BY (scenario 1)

Nell'esempio seguente viene illustrata la differenza per le associazioni ORDER BY con i livelli di compatibilità 80 e 90. Nell'esempio viene creata una tabella di esempio, SampleTable, nel database tempdb.

USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO

Con il livello di compatibilità 90, ovvero il livello predefinito, l'istruzione SELECT... ORDER BY seguente genera un errore perché il nome di colonna nella clausola AS, c1, è ambiguo.

SELECT c1, c2 AS c1
    FROM SampleTable
    ORDER BY c1;
GO

Dopo aver reimpostato il livello di compatibilità del database su 80, la stessa istruzione SELECT... ORDER BY viene completata senza problemi.

sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c1
    FROM SampleTable
    ORDER BY c1;
GO

L'istruzione SELECT... ORDER BY seguente funziona con entrambi i livelli di compatibilità.

sp_dbcmptlevel tempdb, 80
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

sp_dbcmptlevel tempdb, 90
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

B. Effetti del livello di compatibilità su ORDER BY (scenario 2)

Con il livello di compatibilità 90, ovvero il livello predefinito, l'istruzione SELECT...ORDER BY seguente genera un errore perché nella clausola ORDER BY è presente un prefisso di tabella aggiuntivo.

SELECT c1 AS x
    FROM SampleTable
    ORDER BY SampleTable.x;
GO

Dopo aver reimpostato il livello di compatibilità del database su 80, la stessa istruzione SELECT...ORDER BY ha esito positivo.

sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
    FROM SampleTable
    ORDER BY SampleTable.x;
GO

L'istruzione SELECT...ORDER BY seguente funziona con entrambi i livelli di compatibilità.

sp_dbcmptlevel tempdb, 80
SELECT c1 AS x
    FROM SampleTable
    ORDER BY x;
GO
sp_dbcmptlevel tempdb, 90
SELECT c1 AS x
    FROM SampleTable
    ORDER BY x;
GO