Modifiche che possono causare problemi di funzionamento apportate alle funzionalità del Motore di database in SQL Server 2014.
In questo argomento vengono descritte le modifiche di rilievo apportate al motore di database SQL Server 2014 e alle versioni precedenti di SQL Server. Queste modifiche potrebbero comportare l'interruzione di applicazioni, script o funzionalità basati su versioni precedenti di SQL Server. È possibile che questi problemi si verifichino quando viene effettuato un aggiornamento. Per altre informazioni, vedere Use Upgrade Advisor to Prepare for Upgrades.
Modifiche di rilievo in SQL Server 2014
Nessun nuovo problema.
Modifiche di rilievo in SQL Server 2012
Transact-SQL
Funzionalità | Descrizione |
---|---|
Selezione dalle colonne o tabelle denominate NEXT. | Nelle sequenze viene usata la funzione NEXT VALUE FOR dello standard ANSI. Se una tabella o una colonna è denominata NEXT e la tabella o la colonna viene aliasata 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 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 . |
Operatore PIVOT | 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'uso 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 è disponibile attualmente 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 altre 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 altre informazioni, vedere EXECUTE AS (Transact-SQL). |
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. 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. |
Parola chiave riservata WITHIN | WITHIN è ora una parola chiave riservata. I riferimenti a oggetti o colonne denominate 'within' avranno esito negativo. Rinominare l'oggetto o la colonna oppure delimitare il nome tramite 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 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 usa 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. |
MODIFICA TABELLA | L'istruzione ALTER TABLE supporta unicamente nomi di tabella in due parti (schema.oggetto). La specifica di un nome di tabella con i formati seguenti ha ora esito negativo in fase di compilazione con errore 117: server.database.schema.tabella .database.schema.tabella ..schema.tabella Nelle versioni precedenti l'uso del formato server.database.schema.tabella genera l'errore 4902. L'uso del formato .database.schema.tabella o ..schema.tabella è supportato. Per risolvere il problema, rimuovere l'uso 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 usata la funzione SOUNDEX. Per altre 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à costantemente il token TDS DONE con RowCount: 0 ai client quando un'istruzione DML ha esito negativo. Nelle versioni precedenti di SQL Server, al client viene inviato un valore non corretto -1 quando l'istruzione DML che ha esito negativo è contenuta in un blocco TRY-CATCH e viene parametrizzata automaticamente dal motore di database o dal blocco TRY-CATCH non è allo 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 ('Edition') | Edizione del prodotto installata dell'istanza di SQL Server 2012. Usare 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, può restituire "edizione Enterprise" o "edizione Enterprise: 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 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); |
DMV (Dynamic Management View)
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: 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 colonna è stata rinominata pages_kb. |
sys.dm_os_memory_clerks | La colonna multi_pages_kb è stata rimossa. La colonna single_pages_kb colonna è stata rinominata pages_kb. |
sys.dm_os_memory_nodes | Le colonne seguenti sono state rinominate: single_pages_kb è ora: pages_kb multi_pages_kb è ora: foreign_committed_kb |
sys.dm_os_memory_objects | Le colonne seguenti sono state rinominate. pages_allocated_count è ora: pages_in_bytes max_pages_allocated_count è ora: max_pages_in_bytes |
sys.dm_os_sys_info | Le colonne seguenti sono state rinominate: physical_memory_in_bytes è ora: physical_memory_kb bpool_commit_target è ora: committed_target_kb bpool_visible è ora: visible_target_kb virtual_memory_in_bytes è ora: virtual_memory_kb bpool_commited è ora: committed_kb |
sys.dm_os_workers | La colonna delle impostazioni locali è stata rimossa. |
Viste del catalogo
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 usato 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 SQL Server 2008 R2 è stato installato in un computer in cui è installato solo SQL Server 2014, l'applicazione avrà esito negativo perché l'applicazione fa riferimento alla 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 la versione 10.0 viene installata anche, è 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 carica la versione 10.0 dell'assembly. Questo errore si verifica quando l'applicazione chiama uno dei metodi seguenti:
Metodo
GetValue
della classeSqlDataReader
Metodo
GetValues
della classeSqlDataReader
Operatore di indice parentesi quadre [] della classe
SqlDataReader
Metodo
ExecuteScalar
della classeSqlCommand
È possibile risolvere questo problema usando uno dei metodi seguenti:
È possibile risolvere questo problema nel codice chiamando il metodo, anziché i
GetSqlBytes
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 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 tagruntime
.
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 prima di SQL Server 2012, le funzioni stringa non riconoscevano coppie surrogate come un singolo carattere. Alcune operazioni di stringa, ad esempio calcoli di lunghezza stringa e estrazione di sottostringa, hanno restituito risultati non corretti. SQL Server 2012 supporta ora completamente UTF-16 e la corretta gestione delle coppie surrogate.
Il tipo di dati XML in SQL Server consente solo coppie surrogate ben formate. 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. Prendere in considerazione i metodi seguenti per la generazione di valori stringa quando si usa XQuery in SQL Server:
Fornire un valore stringa costante come valore binario. Quando si usa questo metodo, è ancora possibile passare coppie di surrogati non valide o parziali.
Fornire un valore stringa costante fornendo entità carattere. Quando si usa 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 usando sql:column o sql:variable. Quando si usano questi metodi, è ancora possibile introdurre coppie di surrogati non valide o parziali.
Funzioni e operatori XQuery interessati
Le funzioni E gli operatori XQuery seguenti gestiscono ora coppie surrogate UTF-16 correttamente in SQL Server 2012:
fn:string-length. Tuttavia, se una coppia surrogata 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é può trovare la coppia surrogata parziale contenuta nella 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 +, <, , =
lt
eq
>>gt
<le
, e .ge
Chiamate di query distribuite a una procedura di sistema
Le chiamate di query distribuite attraverso OPENQUERY
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 riesce a 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 (ODBC SNAC, MDAC) impostano il livello di isolamento (in base all'impostazione dell'app) su sp_reset_connection.
Per ADO.NET essenzialmente si otterrà un livello di isolamento casuale a seconda della connessione che si ottiene dal pool (e se l'applicazione usa un livello di isolamento diverso). Poiché il pool ADO.NET può riciclare connessioni internamente e in modo trasparente, non è possibile prevedere cosa proverrà dal pool.
Per il driver JDBC si ottiene lo stesso comportamento osservato per ADO.NET
Per ottenere quanto previsto, l'applicazione deve impostare sempre in modo esplicito il livello di isolamento dopo l'apertura della connessione.
La connessione JDBC può essere inserita in pool, pertanto l'applicazione potrebbe ricevere un livello di isolamento casuale senza esserne al corrente.
Per mantenere la compatibilità con le versioni precedenti, questo nuovo comportamento si applica solo ai client recenti a partire da TDS 7.4.
Backward Compatibility
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 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 delle funzioni predefinito a questo spazio dei nomi. Tuttavia, queste funzioni dimostrano 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.
Regole di confronto
Funzionalità | Descrizione |
---|---|
Nuove regole di confronto | SQL Server 2008 introduce nuove regole di confronto in allineamento completo con le regole di confronto fornite da 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, l'assembly Microsoft.SqlServer.Types per supportare nuovi tipi di dati viene installato automaticamente. 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 usare 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 | SQL Server 2008 installa .NET Framework 3.5 SP1, che aggiorna le librerie nella Global Assembly Cache (GAC). Se le librerie non supportate sono state registrate in un database SQL Server, l'applicazione SQL Server potrebbe interrompere il funzionamento dopo l'aggiornamento a SQL Server 2008. Ciò avviee perché la manutenzione o l'aggiornamento delle librerie nel gaC non aggiorna gli assembly all'interno di SQL Server. Se un assembly esiste sia in un database 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 SQL Server. Per altre informazioni, vedere Librerie .NET Framework supportate. Dopo aver aggiornato il database, il servizio o aggiornare la copia dell'assembly all'interno dei database SQL Server con l'istruzione ALTER ASSEMBLY. Per altre informazioni, vedere l'articolo della Knowledge Base 949080. Per rilevare l'eventuale uso 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 | L'uso della rappresentazione all'interno di funzioni definite dall'utente, aggregazioni definite dall'utente o tipi definiti dall'utente può causare un errore dell'applicazione 6522 dopo l'aggiornamento a SQL Server 2008. Gli scenari seguenti hanno esito positivo SQL Server 2005, ma hanno esito negativo in SQL Server 2008. Per ogni scenario vengono fornite le soluzioni. Una funzione definita dall'utente, un'aggregazione definita dall'utente o un metodo UDT che usa la rappresentazione ha un parametro di tipo nvarchar(max) , varbinary(max) text image varchar(max) ntext o un'UDT di grandi dimensioni e non ha l'attributo DataAccessKind.Read nel metodo. Per risolvere questo problema, aggiungere l'attributo DataAccessKind.Read nel metodo, ricompilare l'assembly e riassegnare la routine e l'assembly.Funzione con valori di tabella CLR con un metodo Init che esegue la rappresentazione. Per risolvere questo problema, aggiungere l'attributo DataAccessKind.Read nel metodo, ricompilare l'assembly e riassegnare la routine e l'assembly. Funzione con valori di tabella CLR con un metodo FillRow che esegue la rappresentazione. 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 (Dynamic Management View)
Visualizzazione | Descrizione |
---|---|
sys.dm_os_sys_info | Sono state rimosse le colonne cpu_ticks_in_ms e sqlserver_start_time_cpu_ticks. |
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grant | 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 altre 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 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 invece l'errore 18456. |
Showplan
Funzionalità | Descrizione |
---|---|
Showplan XML Schema | Un nuovo elemento SeekPredicateNew viene aggiunto allo schema XML Showplan e la sequenza xsd racchiusa (SqlPredicatesType) viene convertita in un <elemento xsd:choice> . Anziché uno o più elementi SeekPredicate, uno o più elementi SeekPredicateNew possono ora essere visualizzati nel codice XML Showplan. I due elementi si escludono a vicenda. SeekPredicate viene gestito nello schema XML Showplan per 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 il 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 SQL Server 2005 avranno esito negativo. |
Transact-SQL
Funzionalità | Descrizione |
---|---|
Evento ALTER_AUTHORIZATION_DATABASE DDL | In SQL Server 2005, quando viene generato l'evento DDL ALTER_AUTHORIZATION_DATABASE, il valore 'object' viene restituito nell'elemento ObjectType dell'xml EVENTDATA 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". |
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 le conversioni binarie da carattere a carattere e 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 queste istruzioni hanno esito positivo, ma non hanno alcun effetto. In SQL Server 2008 viene restituito un errore. |
GROUP BY | La clausola GROUP BY non può contenere una sottoquery in un'espressione usata per l'elenco GROUP BY. 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, 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 altre 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 usano questa caratteristica. |
READPAST - hint di tabella | 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 | I nomi di colonna seguenti restituiti nel set di risultati della stored procedure di sp_helpuser sono stati modificati: GroupName è ora: RoleName Group_name è ora: Role_name Group_id è ora: Role_id Users_in_group è ora: Users_in_role |
Transparent Data Encryption | Transparent Data Encryption (TDE) viene eseguito al livello di I/O: la struttura della pagina non presenta crittografia in 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 ignorano il normale meccanismo di SQL Server per l'accesso alle pagine ,ad esempio analizzando direttamente i dati o i file di log, avrà esito negativo quando un database usa TDE perché i dati vengono crittografati nei file. Tali applicazioni possono sfruttare l'API crittografia finestra per sviluppare una soluzione per decrittografare i dati all'esterno di SQL Server. |
XQuery
Funzionalità | Descrizione |
---|---|
Supporto di dati datetime | In SQL Server 2005, i tipi di xs:time dati , xs:date e xs:dateTime non dispongono del supporto del fuso orario. Viene eseguito il mapping dei dati del fuso orario al fuso orario UTC. SQL Server 2008, fornisce un comportamento conforme standard, causando 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. Nota: Modificare le applicazioni e le espressioni XQuery per tenere conto dei nuovi valori di tipo. |
Espressioni XQuery e Xpath | In SQL Server 2005, i passaggi in un'espressione XQuery o XPath che iniziano con un punto (':') sono consentiti. 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 perché 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 tramite SSL | Quando ci si connette con SQL Server Native Client, le applicazioni che usano "SERVER=shortname; FORCE ENCRYPTION=true" con certificato i cui soggetti specificano nomi di dominio completi (FQDN) sono connessi in passato a causa della convalida rilassata. 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: Usare 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 è 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 mirroring del database poiché 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 per le applicazioni con stringhe di connessione hardcoded. -Questa opzione non funziona per le applicazioni che usano mirroring del database perché i provider non cercano alias per i nomi dei partner di failover ricevuti. |
|
Ottenere un certificato emesso per shortname. -Questa opzione funziona per tutte le applicazioni. |
Modifiche di rilievo in SQL Server 2005
Si accumula e si conserva la documentazione per le versioni molto precedenti di Microsoft SQL Server in un set di pagine Web di archiviazione. 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 precedente di Docs:
Gli archivi includono almeno la documentazione relativa alle seguenti versioni meno recenti:
- SQL Server 2014
- SQL Server 2012
- SQL Server 2008 R2
- SQL Server 2008
- SQL Server 2005
SQL Server documentazione 2014 è stata archiviata e non viene più elaborata dai motori di ricerca. Gli articoli del 2014 si dichiarano ora 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
Differenze di funzionamento delle funzionalità del Motore di database in SQL Server 2014
Funzionalità del Motore di database non più utilizzate 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 nelle funzionalità degli strumenti di gestione in SQL Server 2014