Share via


Modifiche che possono causare problemi di funzionamento apportate alle funzionalità del Motore di database in SQL Server 2012.

In questo argomento si illustrano le modifiche di rilievo apportate al Motore di database di SQL Server 2012 e alle versioni precedenti di SQL Server. Queste modifiche potrebbero interrompere il funzionamento di applicazioni, funzionalità o script basati su versioni precedenti di SQL Server. È possibile che questi problemi si verifichino durante gli aggiornamenti. Per ulteriori informazioni, vedere Utilizzare Preparazione aggiornamento per preparare gli aggiornamenti.

Contenuto dell'argomento

Modifiche di rilievo in SQL Server 2012

Modifiche di rilievo in SQL Server 2008/SQL Server 2008R2

Modifiche di rilievo in SQL Server 2005

Modifiche di rilievo in SQL Server 2012

Transact-SQL

Funzionalità

Descrizione

Selezione dalle colonne o dalle tabelle denominate NEXT.

Nelle sequenze viene utilizzata la funzione NEXT VALUE FOR dello standard ANSI. Se una tabella o una colonna è denominata NEXT, presenta un alias VALUE e la parola chiave AS dello standard ANSI viene omessa, è possibile che nell'istruzione risultante si verifichi un errore. Per risolvere il problema, includere la parola chiave AS dello standard ANSI. Ad esempio, SELECT NEXT VALUE FROM Table deve essere riscritto come SELECT NEXT AS VALUE FROM Table e SELECT Col1 FROM NEXT VALUE deve essere riscritto come SELECT Col1 FROM NEXT AS VALUE.

PIVOT - operatore

L'operatore PIVOT non è consentito in una query ricorsiva dell'espressione di tabella comune quando il livello di compatibilità del database è impostato su 110. Riscrivere la query o impostare il livello di compatibilità su 100 o un valore inferiore. L'utilizzo di PIVOT in una query ricorsiva dell'espressione di tabella comune genera risultati non corretti quando sono presenti più righe per raggruppamento.

sp_setapprole e sp_unsetapprole

Il parametro OUTPUT del cookie per sp_setapprole è al momento disponibile come varbinary(8000) che è la lunghezza massima corretta. Tuttavia, dall'implementazione corrente viene restituito varbinary(50). Le applicazioni devono continuare a riservare varbinary(8000) in modo siano in grado di funzionare correttamente se le dimensioni restituite del cookie aumentano in una versione successiva. Per ulteriori informazioni, vedere sp_setapprole (Transact-SQL).

EXECUTE AS

Il parametro OUTPUT del cookie per EXECUTE AS è attualmente disponibile come varbinary(8000) che rappresenta la lunghezza massima corretta. Tuttavia, dall'implementazione corrente viene restituito varbinary(100). Le applicazioni devono continuare a riservare varbinary(8000) in modo siano in grado di funzionare correttamente se le dimensioni restituite del cookie aumentano in una versione successiva. Per ulteriori informazioni, vedere EXECUTE AS (Transact-SQL).

Funzione sys.fn_get_audit_file

Sono state aggiunte due colonne, user_defined_event_id e user_defined_information, per garantire il supporto degli eventi di controllo definiti dall'utente. Nelle applicazioni in cui le colonne non vengono selezionate in base al nome è possibile che venga restituito un numero di colonne maggiore del previsto. Selezionare le colonne in base al nome oppure modificare l'applicazione in modo che vengano accettate queste colonne aggiuntive.

Operazioni CAST e CONVERT su colonne calcolate di tipo time o datetime2

Nelle versioni precedenti di SQL Server 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 di colonna calcolata. Per le colonne calcolate, lo stile predefinito è 0. Questo comportamento influisce sulle colonne calcolate quando vengono create o usate nelle query con parametrizzazione automatica o nelle definizioni dei vincoli.

Con il livello di compatibilità 110, lo stile predefinito per le operazioni CAST e CONVERT sui tipi di dati time e datetime2 è sempre 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.

L'aggiornamento del database al livello di compatibilità 110 non comporta la modifica dei dati utente archiviati su disco. È necessario correggere manualmente questi dati nel modo opportuno. Se ad esempio si utilizza SELECT INTO per creare una tabella da un'origine che contiene un'espressione di colonna calcolata descritta in precedenza, vengono archiviati i dati (con stile 0), non la definizione della colonna calcolata. Sarà necessario aggiornare manualmente questi dati in base allo stile 121.

ALTER TABLE

L'istruzione ALTER TABLE supporta unicamente nomi di tabella in due parti (schema.oggetto). L'utilizzo di un nome di tabella basato sui formati seguenti comporta la generazione dell'errore 117 in fase di compilazione.

  • server.database.schema.tabella

  • .database.schema.tabella

  • ..schema.tabella

Nelle versioni precedenti l'utilizzo del formato server.database.schema.tabella genera l'errore 4902. L'utilizzo del formato .database.schema.tabella o ..schema.tabella è supportato.

Per risolvere il problema, rimuovere l'utilizzo di un prefisso in quattro parti.

Esplorazione dei metadati

L'esecuzione di una query su una vista tramite FOR BROWSE o SET NO_BROWSETABLE ON comporta la restituzione dei metadati della vista, non dell'oggetto sottostante. Questo comportamento corrisponde ad altri metodi di esplorazione dei metadati.

SOUNDEX

Con il livello di compatibilità del database 110, la funzione SOUNDEX consente di implementare nuove regole che potrebbero generare una differenza tra i valori calcolati dalla funzione e quelli calcolati con livelli di compatibilità precedenti. Dopo aver effettuato l'aggiornamento al livello di compatibilità 110, potrebbe essere necessario ricompilare gli indici, gli heap o i vincoli CHECK in cui viene utilizzata la funzione SOUNDEX. Per ulteriori informazioni, vedere SOUNDEX (Transact-SQL).

Messaggio sul numero di righe per le istruzioni DML che hanno esito negativo

In SQL Server 2012 il Motore di database invierà regolarmente il token TDS DONE con RowCount: 0 ai client quando un'istruzione DML ha esito negativo. Nelle versioni precedenti di SQL Server un valore errato -1 viene inviato al client quando l'istruzione DML non riuscita si trova all'interno di un blocco TRY-CATCH e il Motore di database attiva la parametrizzazione automatica oppure il blocco TRY-CATCH non si trova sullo stesso livello dell'istruzione non riuscita. Ad esempio, se un blocco TRY-CATCH chiama una stored procedure e un'istruzione DML nella procedura ha esito negativo, il client riceverà erroneamente un valore -1.

Le applicazioni basate su questo comportamento errato avranno esito negativo.

SERVERPROPERTY ('Edizione')

Edizione del prodotto installata per l'istanza di SQL Server 2012. Utilizzare il valore di questa proprietà per determinare le funzionalità e i limiti, come il numero massimo di CPU, supportati dal prodotto installato.

In base all'edizione Enterprise installata, questa proprietà può restituire 'Enterprise Edition' o 'Enterprise Edition: Core-based Licensing'. Le edizioni Enterprise sono differenziate in base alla capacità di calcolo massima per una sola istanza di SQL Server. Per ulteriori informazioni sui limiti della capacità di calcolo in SQL Server 2012, vedere Limiti della capacità di calcolo per edizione di SQL Server.

CREATE LOGIN

L'opzione CREATE LOGIN WITH PASSWORD = 'password' HASHED non può essere utilizzata con hash creati da SQL Server 7 o versioni precedenti.

Operazioni CAST e CONVERT per datetimeoffset

Gli unici stili supportati nella conversione di tipi date e time in datetimeoffset sono 0 e 1. Tutti gli altri stili di conversione restituiscono l'errore 9809. Il codice seguente, ad esempio, restituisce un errore 9809.

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

SET ROWCOUNT

Il comportamento di SET ROWCOUNT è stato modificato per migliorare l'efficienza di molte query comuni e può influire sui piani di query per i livelli di compatibilità 110 e superiori. Può verificarsi un errore se l'istruzione SET ROWCOUNT modifica il valore ROWCOUNT in 0 o da 0 dopo un'istruzione DECLARE CURSOR e prima di un'istruzione FETCH. Per evitare questo errore, impostare il livello di compatibilità del database su 100 o impostare ROWCOUNT all'esterno delle istruzioni di cursore.

DMV

Visualizzazione

Descrizione

sys.dm_exec_requests

La colonna del comando viene modificata da nvarchar(16) a nvarchar(32).

sys.dm_os_memory_cache_counters

Le colonne seguenti sono state rinominate.

Nome precedente della colonna

Nuovo nome della colonna

single_pages_kb

pages_kb

multi_pages_kb

pages_in_use_kb

sys.dm_os_memory_cache_entries

La colonna pages_allocated_count è stata rinominata pages_kb.

sys.dm_os_memory_clerks

La colonna multi_pages_kb è stata rimossa.

La colonna single_pages_kb è stata rinominata pages_kb.

sys.dm_os_memory_nodes

Le colonne seguenti sono state rinominate.

Nome precedente della colonna

Nuovo nome della colonna

single_pages_kb

pages_kb

multi_pages_kb

foreign_committed_kb

sys.dm_os_memory_objects

Le colonne seguenti sono state rinominate.

Nome precedente della colonna

Nuovo nome della colonna

pages_allocated_count

pages_in_bytes

max_pages_allocated_count

max_pages_in_bytes

sys.dm_os_sys_info

Le colonne seguenti sono state rinominate.

Nome precedente della colonna

Nuovo nome della colonna

physical_memory_in_bytes

physical_memory_kb

bpool_commit_target

committed_target_kb

bpool_visible

visible_target_kb

virtual_memory_in_bytes

virtual_memory_kb

bpool_commited

committed_kb

sys.dm_os_workers

La colonna delle impostazioni locali è stata rimossa.

Visualizzazione

Descrizione

sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions

Una colonna nuova, is_system, è stata aggiunta a sys.data_spaces e a sys.partition_functions. sys.partition_schemes e sys.filegroups ereditano le colonne di sys.data_spaces.

Un valore 1 in questa colonna indica che l'oggetto viene utilizzato per i frammenti dell'indice full-text.

In sys.partition_functions, sys.partition_schemes e sys.filegroups, la nuova colonna non è l'ultima. Rivedere le query esistenti basate sull'ordine delle colonne restituito da queste viste del catalogo.

Tipi di dati CLR SQL (hierarchyid, geometry e geography)

L'assembly Microsoft.SqlServer.Types.dll, che contiene i tipi di dati spaziali e il tipo hierarchyid, è stato aggiornato dalla versione 10.0 alla versione 11.0. È possibile che le applicazioni personalizzate che fanno riferimento a questo assembly abbiano esito negativo quando sussistono le condizioni seguenti.

  • Quando si sposta un'applicazione personalizzata da un computer in cui era installato SQL Server 2008 R2 a un computer in cui è installato solo SQL Server 2012, nell'applicazione si verificherà un errore perché la versione 10.0 dell'assembly SqlTypes a cui viene fatto riferimento non è presente. È possibile che venga visualizzato questo messaggio di errore: “Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.”

  • Quando si fa riferimento all'assembly SqlTypes versione 11.0 ed è installata anche la versione 10.0, è possibile che venga visualizzato questo messaggio di errore: “System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'.”

  • Quando si fa riferimento all'assembly SqlTypes versione 11.0 da un'applicazione personalizzata destinata a .NET 3.5, 4 o 4.5, nell'applicazione si verificherà un errore perché per motivi strutturali SqlClient carica la versione 10.0 dell'assembly. Questo errore si verifica quando l'applicazione chiama uno dei metodi seguenti:

    • Metodo GetValue della classe SqlDataReader

    • Metodo GetValues della classe SqlDataReader

    • Operatore di indice parentesi quadre [] della classe SqlDataReader

    • Metodo ExecuteScalar della classe SqlCommand

È possibile risolvere questo problema utilizzando uno dei metodi seguenti:

  • È possibile risolvere questo problema nel codice chiamando il metodo GetSqlBytes, anziché i metodi Get elencati in precedenza, per recuperare i tipi di sistema CLR di SQL Server, come illustrato nell'esempio seguente:

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";
          using (SqlConnection conn = new SqlConnection("..."))
          {
                SqlCommand cmd = new SqlCommand(query, conn);
    
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
    
                while (reader.Read())
                {
                      // In version 11.0 only
                      SqlGeometry g = 
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));
    
                      // In version 10.0 or 11.0
                      SqlGeometry g2 = new SqlGeometry();
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));
                }
          }
    
  • È possibile risolvere questo problema utilizzando il reindirizzamento degli assembly nel file di configurazione dell'applicazione, come illustrato nell'esempio seguente:

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        ...
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
        </dependentAssembly>
        ...
    </assemblyBinding>
    <runtime>
    
  • È possibile risolvere questo problema nella stringa di connessione specificando il valore "SQL Server 2012" per l'attributo "Type System Version" per forzare il caricamento della versione 11.0 dell'assembly da parte di SqlClient. Questo attributo della stringa di connessione è disponibile unicamente in .NET 4.5 e versioni successive.

  • È consigliabile includere il tag assemblyBinding nel tag runtime.

Supporto per AWE

Address Windowing Extensions (AWE) a 32 bit non è più supportato. Ciò potrebbe comportare un calo delle prestazioni nei sistemi operativi a 32 bit. Per installazioni che richiedono grandi quantità di memoria, eseguire la migrazione a un sistema operativo a 64 bit.

Le funzioni XQuery riconoscono i surrogati

L'indicazione W3C per gli operatori e le funzioni XQuery richiede il riconoscimento di una coppia di surrogati che rappresenti un carattere Unicode surrogato alto come un singolo glifo nella codifica UTF-16. Tuttavia, nelle versioni di SQL Server precedenti a SQL Server 2012, le funzioni stringa non riconoscono le coppie di surrogati come singolo carattere. Alcune operazioni sulle stringhe, ad esempio il calcolo della lunghezza delle stringhe e le estrazioni delle sottostringhe, restituiscono risultati non corretti. SQL Server 2012 supporta ora il formato UTF-16 e la gestione corretta di coppie di surrogati.

Il tipo di dati XML in SQL Server consente unicamente coppie di surrogati con formati corretti. In alcune circostanze alcune funzioni possono tuttavia restituire ancora risultati non definiti o non previsti, poiché è possibile passare coppie di surrogati parziali o non valide alle funzioni XQuery come valori stringa. Si considerino i metodi seguenti per la generazione di valori stringa quando si utilizza XQuery in SQL Server:

  • Fornire un valore stringa costante come valore binario. Quando si utilizza questo metodo, è ancora possibile passare coppie di surrogati non valide o parziali.

  • Fornire un valore stringa costante fornendo entità carattere. Quando si utilizza questo metodo, non è possibile passare coppie di surrogati non valide. Le funzioni XQuery richiedono un'entità a singolo carattere per il carattere di alto livello. Viene generato un errore se vengono fornite le entità carattere per i caratteri della coppia di surrogati.

  • Importare valori esterni tramite sql:column o sql:variable. Quando si utilizza questi metodi, è ancora possibile introdurre coppie di surrogati non valide o parziali.

Funzioni e operatori XQuery interessati

Gli operatori e le funzioni XQuery seguenti gestiscono correttamente le coppie di surrogati UTF-16 in SQL Server 2012:

  • fn:string-length. Tuttavia, se una coppia di surrogati non valida o parziale viene passata come argomento, il comportamento di string-length non risulterà definito.

  • fn:substring.

  • fn:contains. Tuttavia, se una coppia di surrogati parziale viene passata come valore, contains potrebbe restituire risultati imprevisti, poiché potrebbe trovare la coppia di surrogati parziale contenuta in una coppia di surrogati con formato corretto.

  • fn:concat. Tuttavia, se una coppia di surrogati parziale viene passata come valore, concat può generare coppie di surrogati non corrette o parziali.

  • Operatori di confronto e clausola order by. Gli operatori di confronto includono +, <, >, <=, >=, eq, lt, gt, le e ge.

Chiamate di query distribuite a una procedura di sistema

Le chiamate di query distribuite tramite OPENQUERY ad alcune procedure di sistema avranno esito negativo se chiamate da un server a un altro. Si verifica se il Motore di database non è in grado di individuare i metadati per una procedura, ad esempio SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Compatibilità con le versioni precedenti

Il nuovo comportamento dipende dal livello di compatibilità

Le funzioni e gli operatori seguenti dimostrano il nuovo comportamento descritto in precedenza solo quando il livello di compatibilità è 110 o superiore:

  • fn:contains.

  • fn:concat.

  • operatori di confronto e clausola order by

Il nuovo comportamento dipende dall'URI dello spazio dei nomi predefinito per le funzioni

Le funzioni seguenti dimostrano il nuovo comportamento descritto in precedenza solo quando l'URI dello spazio dei nomi predefinito corrisponde allo spazio dei nomi nell'indicazione finale, ovvero http://www.w3.org/2005/xpath-functions. Quando il livello di compatibilità è impostato su 110 o su un valore superiore, per impostazione predefinita SQL Server 2012 associa lo spazio dei nomi della funzione predefinita a questo spazio dei nomi. Tuttavia, queste funzioni dimostrano il nuovo comportamento quando questo spazio dei nomi viene utilizzato indipendentemente dal livello di compatibilità.

  • fn:string-length

  • fn:substring

Icona freccia usata con il collegamento Torna all'inizioTorna all'inizio

Modifiche di rilievo in SQL Server 2008/SQL Server 2008R2

In questa sezione si illustrano le modifiche di rilievo introdotte in SQL Server 2008. Nessuna modifica è stata introdotta in SQL Server 2008 R2.

Regole di confronto

Funzionalità

Descrizione

Nuove regole di confronto

In SQL Server 2008 sono state introdotte nuove regole di confronto completamente allineate a quelle disponibili in Windows Server 2008. Queste 80 nuove regole di confronto presentano miglioramenti nell'aspetto linguistico e sono state segnalate con i riferimenti di versione *_100. Se si scelgono nuove regole di confronto per il server o il database, è necessario tenere presente che esiste la possibilità che non vengano riconosciute dai client con versioni di driver client precedenti. Le regole di confronto non riconosciute possono determinare la restituzione di errori da parte dell'applicazione. Prendere in considerazione le soluzioni seguenti:

  • Aggiornare il sistema operativo client affinché vengano aggiornate le regole di confronto del sistema sottostanti.

  • Se nel client è installato software client del database, è possibile applicare un aggiornamento dei servizi a tale software.

  • Scegliere regole di confronto esistenti di cui viene eseguito il mapping a una tabella codici nel client.

Common Language Runtime (CLR)

Funzionalità

Descrizione

Assembly CLR

Quando un database viene aggiornato a SQL Server 2008, viene automaticamente installato l'assembly Microsoft.SqlServer.Types per il supporto dei nuovi tipi di dati. Le regole di Preparazione aggiornamento rilevano qualsiasi tipo di utente o assembly con nomi in conflitto. Viene quindi indicato di rinominare gli assembly in conflitto, nonché di rinominare qualsiasi tipo in conflitto o di utilizzare nomi in due parti nel codice per fare riferimento al tipo di utente preesistente.

Se un aggiornamento del database rileva un assembly utente con nome in conflitto, rinominerà automaticamente l'assembly e metterà il database in modalità sospetta.

Se durante l'aggiornamento esiste un utente con nome in conflitto, non viene eseguita alcuna operazione. Dopo l'aggiornamento, esisteranno sia il tipo di utente obsoleto che il nuovo tipo di sistema. Il tipo di utente sarà disponibile solo tramite nomi in due parti.

Assembly CLR

Con SQL Server 2008 viene installato .NET Framework 3.5 SP1, che consente di aggiornare le librerie nella Global Assembly Cache (GAC). Se in un database di SQL Server sono registrate librerie non supportate, è possibile che venga arrestato il funzionamento dell'applicazione SQL Server dopo l'aggiornamento a SQL Server 2008. Ciò si verifica in quanto le operazioni di gestione o aggiornamento delle librerie presenti nella GAC non determinano l'aggiornamento degli assembly che si trovano in SQL Server. Se un assembly è presente sia in un database di SQL Server sia nella GAC, le due copie relative devono corrispondere esattamente. Se non corrispondono, si verificherà un errore quando l'assembly verrà utilizzato dalla funzionalità di integrazione con CLR di SQL Server. Per ulteriori informazioni, vedere Librerie .NET Framework supportate.

Dopo aver aggiornato il database, gestire o aggiornare la copia dell'assembly nei database di SQL Server con l'istruzione ALTER ASSEMBLY. Per ulteriori informazioni, vedere l'articolo 949080 della Knowledge Base.

Per rilevare l'eventuale utilizzo di librerie .NET Framework non supportate nell'applicazione, eseguire la query seguente nel database:

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Routine CLR

Se si utilizza la rappresentazione in funzioni CLR definite dall'utente, aggregazioni definite dall'utente o tipi definiti dall'utente (UDT), è possibile che nell'applicazione si verifichi l'errore 6522 dopo l'aggiornamento a SQL Server 2008.

Gli scenari seguenti hanno esito positivo in SQL Server 2005 e negativo in SQL Server 2008. Per ogni scenario vengono fornite le soluzioni.

  1. Una funzione CLR definita dall'utente, un'aggregazione definita dall'utente o un metodo UDT in cui è utilizzata la rappresentazione include un parametro di tipo nvarchar(max), varchar(max), varbinary(max), ntext, text, image o un tipo definito dall'utente di grandi dimensioni e non include l'attributo DataAccessKind.Read sul metodo.

    Per risolvere questo problema, aggiungere l'attributo DataAccessKind.Read sul metodo, ricompilare l'assembly e ridistribuire la routine e l'assembly.

  2. Una funzione CLR con valori di tabella include un metodo Init che esegue la rappresentazione.

    Per risolvere questo problema, aggiungere l'attributo DataAccessKind.Read sul metodo, ricompilare l'assembly e ridistribuire la routine e l'assembly.

  3. Una funzione CLR con valori di tabella include un metodo FillRow che esegue la rappresentazione.

    Per risolvere questo problema, rimuovere la rappresentazione dal metodo FillRow. Non accedere a risorse esterne tramite il metodo FillRow, ma dal metodo Init.

DMV

Visualizzazione

Descrizione

sys.dm_os_sys_info

Rimozione delle colonne cpu_ticks_in_ms e sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

La colonna resource_semaphore_id non è un ID univoco in SQL Server 2008. La modifica può influire sulla risoluzione dei problemi relativi all'esecuzione di query. Per ulteriori informazioni, vedere sys.dm_exec_query_resource_semaphores (Transact-SQL).

Errori ed eventi

Funzionalità

Descrizione

Errori di accesso

In SQL Server 2005 viene restituito l'errore 18452 quando viene utilizzato un account di accesso SQL per connettersi a un server configurato per il solo utilizzo dell'autenticazione di Windows. In SQL Server 2008 viene invece restituito l'errore 18456.

Showplan

Funzionalità

Descrizione

XML Schema Showplan

Un nuovo elemento SeekPredicateNew viene aggiunto a XML Schema Showplan e la sequenza xsd che lo contiene (SqlPredicatesType) viene convertita in un elemento <xsd:choice>. A questo punto è possibile che nello schema Showplan XML vengano visualizzati uno o più elementi SeekPredicateNew, anziché uno o più elementi SeekPredicate. I due elementi si escludono a vicenda. L'elemento SeekPredicate viene mantenuto in Showplan XML Schema per la compatibilità con le versioni precedenti. È tuttavia possibile che i piani di query creati in SQL Server 2008 contengano l'elemento SeekPredicateNew. Le applicazioni per le quali è previsto il recupero del solo elemento SeekPredicate figlio dal nodo ShowPlanXML/BatchSequence/Batch/Istruzioni/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates potrebbero avere esito negativo se l'elemento SeekPredicate non esiste. Riscrivere l'applicazione in modo che nel nodo in questione sia previsto l'elemento SeekPredicate o l'elemento SeekPredicateNew. Per ulteriori informazioni, vedere:

XML Schema Showplan

Un nuovo attributo IndexKind viene aggiunto al tipo complesso ObjectType in Showplan XML Schema. Le applicazioni che convalidano in modo esplicito i piani di SQL Server in base allo schema SQL Server 2005 non riusciranno.

Transact-SQL

Funzionalità

Descrizione

Evento ALTER_AUTHORIZATION_DATABASE DDL

Quando in SQL Server 2005 viene generato l'evento DDL ALTER_AUTHORIZATION_DATABASE, viene restituito il valore "object" nell'elemento ObjectType relativo alla funzione XML EVENTDATA di tale evento se il tipo di entità dell'entità a protezione diretta nell'operazione DDL (Data Definition Language) è un oggetto. In SQL Server 2008 viene restituito il tipo effettivo, quale "table" o "function".

CONVERT

Se uno stile non valido viene passato alla funzione CONVERT, viene restituito un errore quando il tipo di conversione è da binario a carattere o da carattere a binario. Nelle versioni precedenti di SQL Server lo stile non valido è impostato sullo stile predefinito per conversioni da binario a carattere e da carattere a binario.

Autorizzazioni GRANT/DENY/REVOKE EXECUTE per gli assembly

L'autorizzazione EXECUTE non può essere concessa, negata o revocata agli assembly. Tale autorizzazione non ha alcun effetto e ora causa un errore. È invece possibile concederla, negarla o revocarla a stored procedure o funzioni che fanno riferimento al metodo dell'assembly.

Autorizzazioni GRANT/DENY/REVOKE per i tipi di sistema

Tali autorizzazioni non possono essere concesse, negate o revocate ai tipi di sistema. Nelle versioni precedenti di SQL Server l'esecuzione di queste istruzioni ha esito positivo, ma senza alcun effetto. In SQL Server 2008 viene restituito un errore.

GROUP BY

La clausola GROUP BY non può contenere una sottoquery in un'espressione utilizzata per l'elenco GROUP BY. Nelle versioni precedenti di SQL Server questo era consentito. In SQL Server 2008 viene restituito l'errore 144.

Ad esempio, il codice seguente avrà esito positivo in SQL Server 2005, ma esito negativo in SQL Server 2008.

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*) 
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0 
END;

Clausola OUTPUT

Per impedire un comportamento non deterministico, la clausola OUTPUT non può fare riferimento a una colonna di una vista o di una funzione inline con valori di tabella se la colonna in questione viene definita mediante uno dei metodi seguenti:

  • Sottoquery.

  • Funzione definita dall'utente che esegue, o si presume esegua, l'accesso ai dati dell'utente o di sistema.

  • Colonna calcolata che contiene, nella relativa definizione, una funzione definita dall'utente che esegue l'accesso ai dati dell'utente o di sistema.

Quando SQL Server rileva una colonna di questo tipo nella clausola OUTPUT, viene generato l'errore 4186. Per ulteriori informazioni, vedere MSSQLSERVER_4186.

Clausola OUTPUT INTO

La tabella di destinazione della clausola OUTPUT INTO non può includere trigger abilitati.

Opzione a livello di server precompute rank

Questa opzione non è supportata in SQL Server 2008. Modificare il prima possibile le applicazioni che utilizzano questa caratteristica.

Hint di tabella READPAST

Non è possibile specificare l'hint READPAST in Isolamento dello snapshot.

L'hint READPAST viene ignorato se l'opzione di database READ_COMMITED_SNAPSHOT o ALLOW_SNAPSHOT_ISOLATION è impostata su ON. Tuttavia, se si combina l'hint READPAST con READCOMMITTEDLOCK, il comportamento di READPAST è uguale a quello con l'hint di blocco READCOMMITTED.

sp_helpuser

Sono stati modificati i nomi di colonna seguenti restituiti nel set di risultati della stored procedure sp_helpuser.

Nome di colonna precedente

Nuovo nome di colonna

GroupName

RoleName

Group_name

Role_name

Group_id

Role_id

Users_in_group

Users_in_role

Transparent Data Encryption

Transparent Data Encryption (TDE) viene eseguito al livello di I/O: la struttura della pagina non presenta crittografia nella memoria e viene crittografata solo al momento della scrittura su disco della pagina. La crittografia viene applicata sia ai file di database sia ai file di log. Le applicazioni di terze parti, che non tengono conto del normale meccanismo di SQL Server per l'accesso alle pagine e che prevedono ad esempio l'analisi diretta dei file di dati e di log, non riusciranno se in un database viene utilizzato TDE perché i dati contenuti in tali file sono crittografati. Applicazioni di questo tipo possono utilizzare l'API di crittografia di Windows per sviluppare una soluzione per la decrittografia dei dati all'esterno di SQL Server.

XQuery

Funzionalità

Descrizione

Supporto di dati datetime

In SQL Server 2005 i tipi di dati xs:time, xs:date e xs:dateTime non prevedono il supporto dei fusi orari. Viene eseguito il mapping dei dati del fuso orario al fuso orario UTC. In SQL Server 2008 presenta un comportamento conforme agli standard che determina le modifiche seguenti:

  • Vengono convalidati i valori senza fuso orario.

  • Viene mantenuto il fuso orario fornito o viene preservata l'assenza di un fuso orario.

  • Viene modificata la rappresentazione di archiviazione interna.

  • Viene aumentata la risoluzione dei valori archiviati.

  • Non sono consentiti anni negativi.

Modificare le applicazioni e le espressioni XQuery in base ai nuovi valori di tipo.

Espressioni XQuery e Xpath

In SQL Server 2005 sono consentiti passaggi in un'espressione XQuery o XPath che iniziano con due punti (":"). L'istruzione seguente, ad esempio, contiene un test di nome (CTR02) all'interno dell'espressione di percorso che inizia con due punti.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

In SQL Server 2008 questo utilizzo non è consentito, in quanto non è conforme agli standard XML. Viene restituito l'errore 9341. Rimuovere i due punti iniziali o specificare un prefisso per il test del nome, ad esempio (n$/CTR02) o (n$/p1:CTR02).

Connecting

Funzionalità

Descrizione

Connessione da SQL Server Native Client utilizzando SSL

Per connettersi a SQL Server Native Client, le applicazioni che utilizzano "SERVER=shortname; FORCE ENCRYPTION=true" con un certificato il cui Subjects specifichi nomi di dominio completi in passato hanno eseguito la connessione grazie a una convalida flessibile. SQL Server 2008 R2 migliora la sicurezza grazie all'applicazione di oggetti FQDN per i certificati. Per le applicazioni che si basano su una convalida flessibile è necessario eseguire una delle operazioni seguenti:

  • Utilizzare il nome di dominio completo nella stringa di connessione.

    • Questa opzione non richiede la ricompilazione dell'applicazione se la parola chiave SERVER della stringa di connessione viene configurata all'esterno dell'applicazione.

    • Questa opzione non funziona con le applicazioni che dispongono di stringhe di connessione hardcoded.

    • Questa opzione non funziona con le applicazioni che utilizzano il mirroring del database in quanto il server con mirroring risponde con un nome semplice.

  • Aggiungere un alias in modo da eseguire il mapping di shortname al nome di dominio completo.

    • Questa opzione funziona anche con le applicazioni che dispongono di stringhe di connessione hardcoded.

    • Questa opzione non funziona con le applicazioni che utilizzano il mirroring del database in quanto i provider non cercano gli alias dei nomi dei partner di failover ricevuti.

  • Ottenere un certificato emesso per shortname.

    • Questa opzione funziona con tutte le applicazioni.

Icona freccia usata con il collegamento Torna all'inizioTorna all'inizio

Modifiche di rilievo in SQL Server 2005

Per un elenco delle modifiche di rilievo introdotte in SQL Server 2005, vedere Modifiche che possono causare problemi di funzionamento apportate alle funzionalità del Motore di database in SQL Server 2005.

Vedere anche

Riferimento

Funzionalità del Motore di database deprecate in SQL Server 2012

Differenze di funzionamento delle funzionalità del Motore di database in SQL Server 2012

Funzionalità del Motore di database non più utilizzate in SQL Server 2012

Livello di compatibilità ALTER DATABASE (Transact-SQL)

Altre risorse

Compatibilità con le versioni precedenti del Motore di database di SQL Server