Condividi tramite


Modifiche di rilievo alle funzionalità del motore di database in SQL Server 2014

In questo argomento vengono descritte le modifiche di rilievo nel motore di database di SQL Server 2014 e nelle versioni precedenti di SQL Server. Queste modifiche potrebbero interrompere applicazioni, script o funzionalità basate su versioni precedenti di SQL Server. È possibile che si verifichino questi problemi durante l'aggiornamento. Per ulteriori informazioni, vedere Usare l'Upgrade Advisor per prepararsi agli aggiornamenti.

Modifiche di rilievo in SQL Server 2014

Nessun nuovo problema.

Modifiche di rilievo in SQL Server 2012

Transact-SQL

Caratteristica / Funzionalità Descrizione
Selezione da colonne o tabelle denominate NEXT Le sequenze usano la funzione NEXT VALUE FOR standard ANSI. Se una tabella o una colonna è denominata NEXT e alla tabella o alla colonna viene assegnato un alias come VALUE, e se l'AS standard ANSI viene omesso, l'istruzione risultante può causare un errore. Per risolvere il problema, includere la parola chiave AS 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.
Operatore PIVOT L'operatore PIVOT non è consentito in una query CTE (Common Table Expression) ricorsiva quando il livello di compatibilità del database è impostato su 110. Riscrivere la query o impostare il livello di compatibilità su 100 o inferiore. L'uso di PIVOT in una query CTE ricorsiva produce risultati non corretti quando è presente più di una singola riga per raggruppamento.
sp_setapprole e sp_unsetapprole Il parametro cookie OUTPUT per sp_setapprole è attualmente documentato come varbinary(8000) la lunghezza massima corretta. Tuttavia, l'implementazione corrente restituisce varbinary(50). Le applicazioni devono continuare a riservare varbinary(8000) in modo che l'applicazione continui a funzionare correttamente se le dimensioni restituite dal cookie aumentano in una versione futura. Per altre informazioni, vedere sp_setapprole (Transact-SQL).
ESEGUI COME Il parametro OUTPUT del cookie per EXECUTE AS è attualmente documentato come varbinary(8000) la lunghezza massima corretta. Tuttavia, l'implementazione corrente restituisce varbinary(100). Le applicazioni devono continuare a riservare varbinary(8000) in modo che l'applicazione continui a funzionare correttamente se le dimensioni restituite dal cookie aumentano in una versione futura. Per ulteriori informazioni, vedere EXECUTE AS (Transact-SQL).
La funzione sys.fn_get_audit_file Sono state aggiunte due colonne aggiuntive (user_defined_event_id e user_defined_information) per supportare gli eventi di controllo definiti dall'utente. Le applicazioni che non selezionano colonne per nome potrebbero restituire più colonne del previsto. Selezionare le colonne in base al nome o modificare l'applicazione in modo da accettare queste colonne aggiuntive.
WITHIN parola chiave riservata WITHIN è ora una parola chiave riservata. I riferimenti a oggetti o colonne denominati 'within' non funzioneranno. Rinominare l'oggetto o il nome della colonna o delimitare il nome usando parentesi quadre o virgolette. Ad esempio: SELECT * FROM [within].
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 su time e datetime2 i tipi di dati è 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 su time e datetime2 i tipi di dati è 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 modificherà i dati utente archiviati su disco. È necessario correggere manualmente questi dati nel modo opportuno. Ad esempio, se si usa SELECT INTO per creare una tabella da un'origine contenente un'espressione di colonna calcolata descritta in precedenza, i dati (usando lo stile 0) verranno archiviati anziché la definizione di colonna calcolata stessa. Sarà necessario aggiornare manualmente questi dati in base allo stile 121.
ALTER TABLE L'istruzione ALTER TABLE consente solo l'uso di nomi di tabella a due parti (schema.oggetto). La specifica di un nome di tabella usando i formati seguenti ha ora esito negativo in fase di compilazione con errore 117:

server.database.schema.table

.database.schema.table

.. schema.table

Nelle versioni precedenti che specificano il formato server.database.schema.table ha restituito l'errore 4902. La specifica del formato .database.schema.table o del formato ..schema.table ha avuto successo. Per risolvere il problema, rimuovere l'uso di un prefisso in 4 parti.
Esplorazione dei metadati L'esecuzione di query su una vista tramite FOR BROWSE o SET NO_BROWSETABLE ON restituisce ora i metadati della vista, non i metadati dell'oggetto sottostante. Questo comportamento corrisponde ora ad altri metodi di esplorazione dei metadati.
SOUNDEX Con il livello di compatibilità del database 110, la funzione SOUNDEX implementa nuove regole che potrebbero causare l'uso dei valori calcolati dalla funzione in modo diverso rispetto ai valori calcolati con i livelli di compatibilità precedenti. Dopo l'aggiornamento al livello di compatibilità 110, potrebbe essere necessario ricompilare gli indici, gli heap o i vincoli CHECK che usano la funzione SOUNDEX. Per altre informazioni, vedere SOUNDEX (Transact-SQL)
Messaggio di conteggio delle righe per istruzioni DML non riuscite In SQL Server 2012, il motore di database invierà costantemente il token TDS DONE con RowCount: 0 ai client quando un'istruzione DML non riesce. Nelle versioni precedenti di SQL Server viene inviato un valore non corretto di -1 al client quando l'istruzione DML che ha esito negativo è contenuta in un blocco TRY-CATCH ed è parametrizzata automaticamente dal motore di database o il blocco TRY-CATCH non è sullo stesso livello dell'istruzione non riuscita. Ad esempio, se un blocco TRY-CATCH chiama una stored procedure e un'istruzione DML nella routine ha esito negativo, il client riceverà erroneamente un valore -1.

Le applicazioni che si basano su questo comportamento errato avranno esito negativo.
SERVERPROPERTY ('Edition') Edizione del prodotto di SQL Server 2012 installata nell'istanza. Usare il valore di questa proprietà per determinare le funzionalità e i limiti, ad esempio il numero massimo di CPU supportate dal prodotto installato.

In base all'edizione Enterprise installata, può restituire 'Enterprise Edition' o 'Enterprise Edition: Licenze basate su core'. Le edizioni Enterprise sono differenziate in base alla capacità di calcolo massima in base a una singola istanza di SQL Server. Per altre informazioni sui limiti di capacità di calcolo in SQL Server 2012, vedere Limiti di capacità di calcolo per edizione di SQL Server.
CREATE LOGIN L'opzione CREATE LOGIN WITH PASSWORD = 'password' HASHED non può essere usata con hash creati da SQL Server 7 o versioni precedenti.
Operazioni CAST e CONVERT per datetimeoffset Gli unici stili supportati durante la conversione dai tipi di data e ora a datetimeoffset sono 0 o 1. Tutti gli altri stili di conversione restituiscono l'errore 9809. Ad esempio, il codice seguente restituisce l'errore 9809.

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

DMV

Visualizza Descrizione
sys.dm_exec_requests La colonna del comando passa da nvarchar(16) a nvarchar(32).
sys.dm_os_memory_cache_counters Le colonne seguenti sono state rinominate:

single_pages_kb è ora:
pages_kb

multi_pages_kb
è ora: 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:

single_pages_kb è ora:
pagine_kb

multi_pages_kb è ora:
kilobyte_vincolati_stranieri
sys.dm_os_memory_objects Le colonne seguenti sono state rinominate.

Il valore di pages_allocated_count è ora:
pagine_in_byte

max_pages_allocated_count è ora: max_pages_in_bytes
sys.dm_os_sys_info Le colonne seguenti sono state rinominate:

La variabile 'physical_memory_in_bytes' è ora:
memoria_fisica_kb

bpool_commit_target è ora:
obiettivo_allocato_kb

bpool_visible è ora:
bersaglio_visibile_kb

virtual_memory_in_bytes è ora:
virtual_memory_kb

bpool_commited è ora:
kilobyte impegnati
sys.dm_os_workers La colonna delle impostazioni locali è stata rimossa.

Visualizzazioni del Catalogo

Visualizza Descrizione
sys.data_spaces

sys.partition_schemes

gruppi file di sistema

sys.partition_functions
È stata aggiunta una nuova colonna, is_system, alle tabelle sys.data_spaces e sys.partition_functions. (sys.partition_schemes e sys.filegroup ereditano le colonne di sys.data_spaces.

Il valore 1 in questa colonna indica che l'oggetto viene utilizzato per frammenti di indice full-text.

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

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

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. Le applicazioni personalizzate che fanno riferimento a questo assembly potrebbero non riuscire quando si verificano 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 2014, l'applicazione non funzionerà perché la versione 10.0 dell'assembly SqlTypes 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 e viene installato 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, l'applicazione avrà esito negativo perché SqlClient per progettazione carica la versione 10.0 dell'assembly. Questo errore si verifica quando l'applicazione chiama uno dei metodi seguenti:

    • GetValue metodo della SqlDataReader classe

    • GetValues metodo della SqlDataReader classe

    • Operatore indice tra parentesi quadre [] della classe SqlDataReader

    • ExecuteScalar metodo della SqlCommand classe

È possibile risolvere questo problema usando uno dei metodi seguenti:

  • È possibile risolvere questo problema nel codice chiamando il GetSqlBytes metodo , anziché i metodi Get elencati in precedenza, per recuperare i tipi di sistema CLR 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 usando il reindirizzamento dell'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 SqlClient a caricare la versione 11.0 dell'assembly. Questo attributo della stringa di connessione è disponibile solo in .NET 4.5 e versioni successive.

  • Il tag assemblyBinding deve essere racchiuso all'interno del tag runtime.

Supporto per AWE

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

Le funzioni XQuery sono Surrogate-Aware

La raccomandazione W3C per le funzioni e gli operatori XQuery richiede che si conti una coppia di surrogati che rappresenta un carattere Unicode di intervallo elevato come un singolo glifo nell'encoding UTF-16. Tuttavia, nelle versioni di SQL Server precedenti a SQL Server 2012, le funzioni stringa non riconoscevano le coppie di surrogati come un singolo carattere. Alcune operazioni sulle stringhe, ad esempio calcoli di lunghezza della stringa ed estrazione di sottostringhe, hanno restituito risultati non corretti. SQL Server 2012 supporta ora completamente UTF-16 e la corretta gestione delle coppie di surrogati.

Il tipo di dati XML in SQL Server consente solo coppie surrogate ben formate. Tuttavia, alcune funzioni possono comunque restituire risultati non definiti o imprevisti in determinate circostanze, poiché è possibile passare coppie di surrogati non valide o parziali alle funzioni XQuery come valori stringa. Considerare i metodi seguenti per generare valori stringa quando si usa XQuery in SQL Server:

  • Specificare un valore stringa costante come valore binario. Quando si usa questo metodo, è possibile trasmettere coppie surrogate non valide o parziali.

  • Specificare un valore stringa costante specificando entità dei caratteri. Quando si usa questo metodo, non è possibile passare coppie di surrogati non valide. Le funzioni XQuery richiedono un'entità a carattere singolo per il carattere di alto livello. Queste funzioni generano un errore se vengono fornite le entità carattere per i caratteri della coppia di surrogati.

  • Importare valori esterni usando sql:column o sql:variable. Quando si usano questi metodi, rimane possibile introdurre coppie surrogate non valide o parziali.

Funzioni e operatori XQuery interessati

Le funzioni e gli operatori XQuery seguenti ora 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 della lunghezza della stringa non è definito.

  • fn:substring.

  • fn:contains. Tuttavia, se una coppia surrogata parziale viene passata come valore, contiene può restituire risultati imprevisti, poiché potrebbe trovare la coppia surrogata parziale contenuta in una coppia surrogata ben formata.

  • fn:concat. Tuttavia, se una coppia surrogata parziale viene passata come valore, concat può produrre coppie surrogate non corrette o coppie surrogate 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 quando viene chiamato da un server SQL Server 2012 a un altro. Ciò si verifica quando il motore di database non può individuare i metadati per una routine. Ad esempio: SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Livello di isolamento e sp_reset_connection

Il livello di isolamento per le connessioni viene gestito nel modo seguente dai driver client:

  • Tutti i driver nativi (SNAC, MDAC, ODBC) impostano il livello di isolamento (in base all'impostazione dell'app) su sp_reset_connection.

  • Per ADO.NET si otterrà essenzialmente un livello di isolamento casuale a seconda della connessione ottenuta dal pool (e se l'applicazione usa un livello di isolamento diverso). Poiché ADO.NET pool può riciclare le connessioni internamente e in modo trasparente, non è possibile stimare ciò che uscirà dal pool.

  • Per il driver JDBC si ottiene lo stesso comportamento di ADO.NET

    L'applicazione deve sempre impostare in modo esplicito il livello di isolamento dopo l'apertura della connessione per ottenere ciò che vuole.

    La connessione JDBC può essere inserita in pool, quindi l'applicazione può ottenere un livello di isolamento casuale e non conoscerlo.

Per mantenere la compatibilità con le versioni precedenti, questo nuovo comportamento si applica solo ai client recenti che iniziano con TDS 7.4.

Retrocompatibilità

Il nuovo comportamento dipende dal livello di compatibilità

Le funzioni e gli operatori seguenti illustrano 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 predefinito dello spazio dei nomi per le funzioni

Le funzioni seguenti illustrano il nuovo comportamento descritto in precedenza solo quando l'URI dello spazio dei nomi predefinito corrisponde allo spazio dei nomi nella raccomandazione finale, http://www.w3.org/2005/xpath-functionsovvero . Quando il livello di compatibilità è 110 o superiore, per impostazione predefinita SQL Server 2012 associa lo spazio dei nomi predefinito della funzione a questo spazio dei nomi. Tuttavia, queste funzioni illustrano il nuovo comportamento quando questo spazio dei nomi viene usato indipendentemente dal livello di compatibilità.

  • fn:string-length

  • fn:substring

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

Questa sezione contiene le modifiche di rilievo introdotte in SQL Server 2008. Non sono state introdotte modifiche in SQL Server 2008 R2.

Collazioni

Caratteristica / Funzionalità Descrizione
Nuove collazioni SQL Server 2008 introduce nuove regole di confronto completamente allineate alle regole di confronto fornite da Windows Server 2008. Queste 80 nuove regole di confronto hanno migliorato l'accuratezza linguistica e sono indicate da riferimenti alla versione di *_100. Se si sceglie una nuova regola di confronto per il server o il database, tenere presente che le regole di confronto potrebbero non essere riconosciute dai client con driver client meno recenti. Le regole di confronto non riconosciute possono causare errori e il fallimento dell'applicazione. Prendere in considerazione le soluzioni seguenti:

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

Se il client dispone di software client di database installato, è consigliabile applicare un aggiornamento del servizio al software client del database.

Scegliere una collazione esistente che si mappa a una pagina di codice sul client.

Common Language Runtime (CLR)

Caratteristica / Funzionalità Descrizione
Assembly CLR Quando un database viene aggiornato a SQL Server 2008, l'assembly Microsoft.SqlServer.Types per supportare nuovi tipi di dati viene installato automaticamente. Le regole del Consulente di Aggiornamento rilevano qualsiasi tipo di utente o assembly con nomi in conflitto. Il Consulente Aggiornamento consiglierà di rinominare qualsiasi assembly conflittuale e di rinominare qualsiasi tipo in conflitto oppure di utilizzare nomi composti nel codice per fare riferimento a quel tipo utente preesistente.

Se un aggiornamento del database rileva un assembly utente con un nome in conflitto, rinomina automaticamente tale assembly e inserisce 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 SQL Server 2008 installa .NET Framework 3.5 SP1, che aggiorna le librerie nella Global Assembly Cache (GAC). Se sono presenti librerie non supportate registrate in un database di SQL Server, l'applicazione SQL Server potrebbe smettere di funzionare dopo l'aggiornamento a SQL Server 2008. Ciò è dovuto al fatto che la manutenzione o l'aggiornamento delle librerie nella GAC non aggiorna gli assembly all'interno di SQL Server. Se un assembly esiste sia in un database di SQL Server che nella GAC, le due copie dell'assembly devono corrispondere esattamente. Se non corrispondono, si verificherà un errore quando l'assembly viene usato dall'integrazione CLR di SQL Server. Per altre informazioni, vedere Librerie .NET Framework supportate.

Dopo aver aggiornato il tuo database, aggiorna oppure revisiona la copia dell'assembly all'interno dei tuoi database di SQL Server con l'istruzione ALTER ASSEMBLY. Per altre informazioni, vedere l'articolo della Knowledge Base 949080.

Per rilevare se si usa una libreria .NET Framework non supportata nell'applicazione, eseguire la query seguente nel database.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
Routine CLR L'uso della rappresentazione all'interno di funzioni CLR definite dall'utente, aggregazioni definite dall'utente o tipi definiti dall'utente (UDT) può causare il fallimento dell'applicazione con l'errore 6522 dopo l'aggiornamento a SQL Server 2008. Gli scenari seguenti hanno esito positivo in SQL Server 2005, ma hanno esito negativo in SQL Server 2008. Le risoluzioni vengono fornite per ogni scenario.

Una funzione CLR definita dall'utente, un'aggregato definito dall'utente o un metodo definito dall'utente che utilizza la rappresentazione ha un parametro di tipo nvarchar(max), varchar(max), varbinary(max), ntext, text, image o un UDT di grandi dimensioni e non dispone dell'attributo DataAccessKind.Read nel metodo. Per risolvere questo problema, aggiungere l'attributo DataAccessKind.Read nel metodo , ricompilare l'assembly e distribuire nuovamente la routine e l'assembly.

Funzione CLR con valori di tabella con un metodo Init che esegue l'impersonificazione. Per risolvere questo problema, aggiungere l'attributo DataAccessKind.Read nel metodo , ricompilare l'assembly e distribuire nuovamente la routine e l'assembly.

Funzione CLR con valori di tabella che ha un metodo FillRow che esegue l'impersonificazione. Per risolvere questo problema, rimuovere la rappresentazione dal metodo FillRow. Non accedere alle risorse esterne usando il metodo FillRow . Accedere invece alle risorse esterne dal metodo Init .

DMV

Visualizza Descrizione
sys.dm_os_sys_info Sono state rimosse le colonne cpu_ticks_in_ms e sqlserver_start_time_cpu_ticks dal database.
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants La colonna resource_semaphore_id non è un ID univoco in SQL Server 2008. Questa modifica può influire sulla risoluzione dei problemi di esecuzione delle query. Per altre informazioni, vedere sys.dm_exec_query_resource_semaphores (Transact-SQL).

Errori ed eventi

Caratteristica / Funzionalità Descrizione
Errori di accesso In SQL Server 2005 viene restituito l'errore 18452 quando viene usato un account di accesso SQL per connettersi a un server configurato per usare solo l'autenticazione di Windows. In SQL Server 2008 viene restituito l'errore 18456.

Piano di Visualizzazione

Caratteristica / Funzionalità Descrizione
Showplan XML Schema Un nuovo elemento SeekPredicateNew viene aggiunto allo schema Showplan XML e la sequenza xsd contenitore (SqlPredicatesType) viene convertita in un elemento di tipo <xsd:choice> . Anziché uno o più elementi SeekPredicate , uno o più elementi SeekPredicateNew possono ora essere visualizzati nel file XML Showplan. I due elementi si escludono a vicenda. SeekPredicate viene mantenuto in Showplan XML Schema per garantire la compatibilità con le versioni precedenti; Tuttavia, i piani di query creati in SQL Server 2008 possono contenere l'elemento SeekPredicateNew . Le applicazioni che prevedono di recuperare solo l'elemento figlio SeekPredicate dal nodo ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates potrebbero non riuscire se l'elemento SeekPredicate non esiste. Riscrivere l'applicazione per prevedere l'elemento SeekPredicate o SeekPredicateNew in questo nodo. Per ulteriori informazioni, vedere .
Showplan XML Schema Un nuovo attributo IndexKind viene aggiunto al tipo complesso ObjectType nello schema XML Showplan. Le applicazioni che convalidano rigorosamente i piani di SQL Server rispetto allo schema di SQL Server 2005 avranno esito negativo.

Transact-SQL

Caratteristica / Funzionalità Descrizione
ALTER_AUTHORIZATION_DATABASE evento DDL In SQL Server 2005, quando viene attivato l'evento DDL ALTER_AUTHORIZATION_DATABASE, il valore 'object' viene restituito nel nodo ObjectType dell'evento EVENTDATA XML per questo evento, quando il tipo di entità dell'operazione DDL (Data Definition Language) è un oggetto. In SQL Server 2008 viene restituito il tipo effettivo ,ad esempio 'table' o 'function'.
CONVERTIRE Se alla funzione CONVERT viene passato uno stile non valido, viene restituito un errore quando il tipo di conversione è binario in carattere o carattere in binario. Nelle versioni precedenti di SQL Server, lo stile non valido è impostato sullo stile predefinito per le conversioni binarie da carattere a carattere e da carattere a binario.
GRANT/DENY/REVOKE EXECUTE sugli assembly Non è possibile concedere, negare o revocare l'autorizzazione EXECUTE agli assembly. Questa autorizzazione non ha alcun effetto e ora causa un errore. Concedere, negare o revocare l'autorizzazione EXECUTE per le stored procedure o le funzioni che fanno riferimento al metodo assembly.
AUTORIZZAZIONI GRANT/DENY/REVOKE per i tipi di sistema Le autorizzazioni non possono essere concesse, negate o revocate ai tipi di sistema. Nelle versioni precedenti di SQL Server queste istruzioni hanno esito positivo ma non hanno alcun effetto. In SQL Server 2008 viene generato un errore.
RAGGRUPPA PER La clausola GROUP BY non può contenere una sottoquery in un'espressione utilizzata per l'elenco di raggruppamento. Nelle versioni precedenti di SQL Server, questo è stato consentito. In SQL Server 2008 viene restituito l'errore 144.

Ad esempio, il codice seguente avrà esito positivo in SQL Server 2005 e avrà 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 evitare un comportamento non deterministico, la clausola OUTPUT non può fare riferimento a una colonna da una vista o da una funzione con valori di tabella inline quando tale colonna è definita da uno dei metodi seguenti:

Sottoquery.

Una funzione definita dall'utente che esegue l'accesso ai dati utente o di sistema o si presuppone che esegua tale accesso.

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



Quando SQL Server rileva una colonna di questo tipo nella clausola OUTPUT, viene generato l'errore 4186. Per altre informazioni, vedere MSSQLSERVER_4186.
Clausola OUTPUT INTO La tabella di destinazione della clausola OUTPUT INTO non può avere trigger abilitati.
opzione di rank precompute a livello server Questa opzione non è supportata in SQL Server 2008. Modificare le applicazioni che attualmente usano questa funzionalità il prima possibile.
Hint per la tabella READPAST Non è possibile specificare l'hint READPAST in Isolamento snapshot.

L'hint READPAST viene ignorato quando 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 READPAST è uguale a quello dell'hint READCOMMITTED di blocco.
sp_helpuser I nomi di colonna seguenti restituiti nel set di risultati della stored procedure sp_helpuser sono stati modificati:

GroupName è ora:
NomeRuolo

Group_name è ora:
Nome_del_ruolo

Group_id è ora:
Role_id

Users_in_group è ora:
Utenti_nel_ruolo
Crittografia Trasparente dei Dati Transparent Data Encryption (TDE) viene eseguito a livello di I/O: la struttura della pagina non è crittografata in memoria e viene crittografata solo quando la pagina viene scritta su disco. Sia i file di database che i file di log vengono crittografati. Le applicazioni di terze parti che ignorano il normale meccanismo di SQL Server per l'accesso alle pagine (ad esempio, analizzando direttamente i dati o i file di log), avranno esito negativo quando un database usa TDE perché i dati vengono crittografati nei file. Tali applicazioni possono sfruttare l'API di crittografia Window per sviluppare una soluzione per decrittografare i dati all'esterno di SQL Server.

XQuery

Caratteristica / Funzionalità Descrizione
Supporto per data e ora In SQL Server 2005 i tipi di xs:timedati , xs:datee xs:dateTime non dispongono del supporto del fuso orario. I dati del fuso orario vengono mappati al fuso orario UTC. SQL Server 2008 offre un comportamento conforme allo standard, con le modifiche seguenti:

I valori senza fuso orario vengono convalidati.

Il fuso orario specificato o l'assenza di un fuso orario viene mantenuto.

La rappresentazione di archiviazione interna viene modificata.

La risoluzione dei valori archiviati è aumentata.

Gli anni negativi non sono consentiti.



Nota: modificare le applicazioni e le espressioni XQuery per tenere conto dei nuovi valori di tipo.
Espressioni XQuery e Xpath In SQL Server 2005 sono consentiti i passaggi in un'espressione XQuery o XPath che iniziano con due punti (':'). Ad esempio, l'istruzione seguente contiene un test del nome (CTR02) all'interno dell'espressione di percorso che inizia con un colon.

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 perché non è conforme agli standard XML. Viene restituito l'errore 9341. Rimuovere i due punti iniziali o specificare un prefisso per il nome test, ad esempio (n$/CTR02) o (n$/p1:CTR02).

Connessione in corso

Caratteristica / Funzionalità Descrizione
Connessione da SQL Server Native Client tramite SSL Quando ci si connette con SQL Server Native Client, le applicazioni che utilizzano "SERVER=shortname; FORCE ENCRYPTION=true" con certificati i cui subject specificano nomi di dominio completamente qualificati (FQDN) si sono connesse in passato a causa della convalida meno rigorosa. SQL Server 2008 R2 migliora la sicurezza applicando soggetti FQDN per i certificati. Le applicazioni che si basano sulla convalida rilassata devono eseguire una delle azioni seguenti:

Usare il FQDN (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 è configurata all'esterno dell'applicazione.

-Questa opzione non funziona per le applicazioni con stringhe di connessione hardcoded.

-Questa opzione non funziona per le applicazioni che usano il mirroring del database perché il server con mirroring risponde con un nome semplice.
Aggiungere un alias al nome breve per mappare al nome di dominio completo.

-Questa opzione funziona anche per le applicazioni con stringhe di connessione hardcoded.

-Questa opzione non funziona per le applicazioni che usano il mirroring del database perché i provider non cercano alias per i nomi dei partner di failover ricevuti.
Ottenere un certificato emesso per nome abbreviato.

-Questa opzione funziona per tutte le applicazioni.

Modifiche di rilievo in SQL Server 2005

Si accumula e si conserva la documentazione per versioni molto precedenti di Microsoft SQL Server in un set di pagine Web di archivio . Le pagine Web archiviate non vengono elaborate dai motori di ricerca, ad esempio Bing.com e Google.com. Tuttavia, è possibile visualizzare questi archivi all'indirizzo /versioni precedenti di Docs:

Questi archivi includono la documentazione per almeno le versioni precedenti seguenti:

  • SQL Server 2014
  • SQL Server 2012
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

La documentazione di SQL Server 2014 è stata archiviata e non viene più elaborata dai motori di ricerca. Gli articoli del 2014 ora si dichiarano con NOINDEX e NOFOLLOW.

La versione più recente di SQL Server, insieme ad altre versioni recenti, è documentata qui.

Vedere anche

Funzionalità del motore di database deprecate in SQL Server 2014
Modifiche del comportamento alle funzionalità del motore di database in SQL Server 2014
Funzionalità del motore di database non più disponibili in SQL Server 2014
Compatibilità con le versioni precedenti del motore di database di SQL Server
Livello di compatibilità ALTER DATABASE (Transact-SQL)
Modifiche di rilievo alle funzionalità degli strumenti di gestione in SQL Server 2014