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:
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:
|
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.
|
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:
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:
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:
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.
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. |
Vedere anche