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

In questo argomento vengono descritte le modifiche di rilievo introdotte nel Motore di database. Tali modifiche potrebbero interrompere il funzionamento di applicazioni, funzionalità o script basati su versioni precedenti di SQL Server. È possibile che questi problemi si verifichino quando viene eseguito un aggiornamento. Per ulteriori informazioni, vedere Utilizzo di Preparazione aggiornamento per preparare gli aggiornamenti.

Regole di confronto

Funzionalità

Descrizione

Nuove regole di confronto

In SQL Server 2008 sono state introdotte nuove regole di confronto completamente allineate con 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.

Per ulteriori informazioni, vedere Impostazione e modifica di regole di confronto.

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. In seguito all'aggiornamento, saranno presenti sia il tipo di utente precedente 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 interrotto 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, è 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 che utilizza 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.

Viste a gestione dinamica

Vista

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_semaphores sys.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 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

Schema Showplan XML

Un nuovo elemento SeekPredicateNew viene aggiunto allo schema Showplan XML 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 nello schema Showplan XML 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 Miglioramenti apportati all'elaborazione di query su tabelle e indici partizionati.

Schema Showplan XML

Un nuovo attributo IndexKind viene aggiunto al tipo complesso ObjectType nello schema Showplan XML. 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.

Clausola OUTPUT

Per impedire il comportamento non deterministico, la clausola OUTPUT non può fare riferimento a una colonna di una vista o di una funzione in linea valutata a livello 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 funzionalità.

Hint di tabella READPAST

L'hint di tabella READPAST non può essere specificato quando l'opzione di database READ_COMMITTED_SNAPSHOT è impostata su ON e una delle condizioni seguenti è vera:

  • Il livello di isolamento delle transazioni della sessione è READ COMMITTED.

  • L'hint di tabella READCOMMITTED viene specificato anche nella query.

Per specificare l'hint READPAST in questi casi, rimuovere l'hint di tabella READCOMMITTED, se presente, e includere l'hint di tabella READCOMMITTEDLOCK nella query.

sp_helpuser

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

Nome di colonna precedenteNuovo nome di colonna
GroupNameRoleName
Group_nameRole_name
Group_idRole_id
Users_in_groupUsers_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 la scansione diretta dei file di dati e di log, non riusciranno se un database utilizza 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 dispongono di supporto del fuso orario. 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. Per ulteriori informazioni, vedere Utilizzo del codice XML con i tipi di dati time, date, datetime2 e datetimeoffset.

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 pertanto 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).

Cronologia modifiche

Aggiornamento del contenuto

Aggiunta di una modifica per le espressioni XQuery e Xpath.