Modifiche che possono causare problemi di funzionamento apportate alle funzionalità del Motore di database in SQL Server 2005.
Data aggiornamento: 17 novembre 2008
In questo argomento vengono descritte le modifiche che possono causare problemi di funzionamento delle applicazioni basate su versioni precedenti di SQL Server apportate a Motore di database in Microsoft SQL Server 2005.
Connettività client/server
Funzionalità | Descrizione |
---|---|
Protocolli di rete Banyan VINES Sequenced Packet Protocol (SPP), Multiprotocol, AppleTalk e NWLink IPX/SPX |
I protocolli di rete Banyan VINES Sequenced Packet Protocol (SPP), Multiprotocol, AppleTalk e NWLink IPX/SPX non sono supportati in SQL Server 2005. Le applicazioni client devono utilizzare un protocollo supportato per connettersi a SQL Server 2005. Se è stato installato un alias che utilizza uno dei protocolli non supportati, tale alias deve essere modificato in modo da utilizzare uno dei protocolli supportati. Se la stringa di connessione di un'applicazione utilizza o carica in modo specifico uno di questi protocolli non supportati, tramite la proprietà NETWORK=DBMSRPCN per RPC, NETWORK=DBMSADSN per Appletalk o NETWORK=DBMSVINN per Banyan VINES, oppure tramite un prefisso esplicito quale spx:server\instance per SPX, bv:server per Banyan VINES, adsp:server per AppleTalk o rpc:server per Multiprotocol, sarà necessario modificare l'applicazione in modo che utilizzi uno dei protocolli supportati. Per ulteriori informazioni, vedere Scelta di un protocollo di rete. |
MDAC |
Nelle versioni di MDAC precedenti a MDAC 2.6 non sono supportate le istanze denominate. Per consentire la connessione dell'applicazione alle istanze denominate, eseguire l'aggiornamento alla versione corrente di MDAC. |
Proxy Winsock |
Non è possibile configurare il proxy Winsock utilizzando strumenti di SQL Server. Per informazioni sulla configurazione del proxy Winsock, vedere la documentazione del server proxy. |
Opzioni di configurazione
Funzionalità
Descrizione
AUTO_UPDATE_STATISTICS
Impostare AUTO_UPDATE_STATISTICS su ON prima di eseguire l'aggiornamento di un database. In caso contrario le statistiche dei database non verranno aggiornate durante l'aggiornamento a SQL Server 2005. Se si utilizzano statistiche di una versione precedente di SQL Server, è possibile che i piani di query non siano ottimali. Se invece AUTO_UPDATE_STATISTICS viene impostata su ON, tutte le statistiche verranno aggiornate la prima volta che vi viene fatto riferimento. L'aggiornamento delle statistiche consente di aumentare la possibilità che vengano scelti i piani di query ottimali durante l'esecuzione di query.
Nota:
In alcuni casi il processo di aggiornamento delle statistiche può influire sulle prestazioni del server durante l'esecuzione di query quando viene fatto per la prima volta riferimento alle statistiche dopo l'impostazione di AUTO_UPDATE_STATISTICS su ON.
Per impostare l'opzione di database SET AUTO_UPDATE_STATISTICS su ON, utilizzare l'istruzione ALTER DATABASE oppure eseguire sp_updatestats per aggiornare le statistiche nel database.
Opzione max server memory
In SQL Server 2000 il pool di buffer di SQL Server può superare il limite specificato nell'opzione max server memory se è disponibile memoria fisica di sistema. In SQL Server 2005 il pool di buffer non può superare il valore di max server memory. Una volta raggiunto questo limite, la query non viene eseguita e restituisce un errore di memoria di sistema insufficiente.
Se si riceve questo errore e l'opzione max server memory è impostata, aumentare il valore dell'opzione o ripristinare il valore predefinito 2147483647. Per ulteriori informazioni, vedere Opzioni per la memoria server.
Opzione query governor cost limit
Se viene applicata l'istruzione SET GOVERNOR_QUERY_COST_LIMIT oppure l'opzione query governor cost limit di sp_configure, le query eseguite in una versione precedente di SQL Server non verranno eseguite in SQL Server 2005. a causa delle modifiche apportate al modello di costo delle query.
Aggiornare le impostazioni di query governor cost limit dell'istanza del server o della connessione specificando un valore appropriato, oppure impostare il valore su 0 se non si desidera specificare un periodo limitato per l'esecuzione di una query.
Database, file di dati e di log
Funzionalità | Descrizione |
---|---|
Unità compresse |
Non è possibile creare o aggiornare database su unità compresse con SQL Server 2005. Durante l'installazione di SQL Server 2005 selezionare un'unità non compressa per i database di sistema e verificare che questi vengano aggiornati su unità non compresse. Tenere tuttavia presente che, dopo l'aggiornamento del database, è possibile copiare database e filegroup secondari di sola lettura in un file system compresso NTFS. |
File di dati |
È necessario spazio su disco aggiuntivo per consentire ai file di dati di gestire le modifiche seguenti:
Per accertarsi che le risorse siano in grado di gestire gli aumenti di dimensione durante le operazioni di aggiornamento e di produzione successiva, è consigliabile impostare l'aumento automatico su ON per tutti file di dati utente prima di eseguire l'aggiornamento a SQL Server 2005. Dopo l'aggiornamento e il test dei carichi di lavoro è possibile impostare l'aumento automatico su OFF o regolare di conseguenza l'incremento FILEGROWTH. Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL). |
Modalità di compatibilità del database |
Quando si aggiorna un database a SQL Server 2005 da qualsiasi versione precedente di SQL Server, il database mantiene il livello di compatibilità esistente. Se si cambia la modalità di compatibilità a 90 dopo l'aggiornamento, le differenze in tale modalità possono influire sulle applicazioni. Per ulteriori informazioni su queste differenze, vedere sp_dbcmptlevel (Transact-SQL). |
ID database 32767 |
Questo ID database è riservato in SQL Server 2005. Scollegare il database prima dell'aggiornamento. |
Filegroup |
Prima dell'aggiornamento a SQL Server 2005 i filegroup di tutti i database inclusi nell'istanza di SQL Server devono essere impostati su READ_WRITE. Per impostare il filegroup su READ_WRITE utilizzare ALTER DATABASE. |
File di log |
In SQL Server 2005 è necessario spazio su disco aggiuntivo per i file di log delle transazioni. Durante la fase di rollback di un ripristino a seguito dell'arresto anomalo del sistema, SQL Server 2005 consente agli utenti di accedere al database. Questo è possibile in quanto le transazioni di cui non è stato eseguito il commit quando si è verificato l'arresto anomalo del sistema riacquisiscono eventuali blocchi applicati prima di tale arresto. Quando è in corso il rollback delle transazioni, i blocchi consentono di proteggere le transazioni dall'interferenza degli utenti. Questo blocco aggiuntivo delle informazioni deve essere mantenuto nel log delle transazioni. Per accertarsi che le risorse siano in grado di gestire gli aumenti di dimensione durante le operazioni di aggiornamento e di produzione successiva, è consigliabile impostare l'aumento automatico su ON per tutti file di log utente prima di eseguire l'aggiornamento a SQL Server 2005. Dopo l'aggiornamento e il test dei carichi di lavoro è possibile impostare l'aumento automatico su OFF o regolare di conseguenza l'incremento FILEGROWTH. Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL). |
Database model |
Il database model contiene le modifiche seguenti in SQL Server 2005:
|
Database tempdb |
È necessario spazio su disco aggiuntivo per i file di dati e di log di tempdb in SQL Server 2005. Per accertarsi che le risorse siano in grado di gestire gli aumenti di dimensione durante le operazioni di aggiornamento e di produzione successiva, è consigliabile impostare l'aumento automatico su ON per tutti i file di dati e di log di tempdb prima di eseguire l'aggiornamento a SQL Server 2005. Dopo l'aggiornamento e il test dei carichi di lavoro è possibile impostare l'aumento automatico su OFF o regolare di conseguenza l'incremento FILEGROWTH. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi allo spazio su disco insufficiente in tempdb. |
Funzionalità
Funzionalità
Descrizione
Stored procedure estese
Le stored procedure estese registrate precedentemente senza il percorso completo per il nome DLL possono non funzionare dopo l'aggiornamento a SQL Server 2005, poiché la vecchia directory BINN non viene aggiunta al nuovo percorso durante il processo di aggiornamento. SQL Server può non essere in grado di trovare le stored procedure estese.
Prima di eseguire l'aggiornamento a SQL Server 2005 eseguire la procedura seguente per ogni stored procedure estesa non registrata utilizzando un percorso completo:
- Per eliminare la stored procedure estesa eseguire sp_dropextendedproc.
- Per registrare la stored procedure estesa con il percorso completo eseguire sp_addextendedproc.
Distribuzione dei log
La distribuzione dei log delle versioni precedenti di SQL Server è incompatibile con quella di SQL Server 2005 e non può essere aggiornata direttamente. Dopo l'aggiornamento a SQL Server 2005, riconfigurare la distribuzione dei log utilizzando SQL Server Management Studio o le stored procedure. Per ulteriori informazioni, vedere Migrazione di una configurazione per la distribuzione dei log di SQL Server 2000 a SQL Server 2005.
Utilità osql
L'utilità osql non supporta i comandi ED e !!. Rimuovere dagli script i riferimenti ai comandi ED e !!. Per utilizzare i comandi ED e !! utilizzare invece l'utilità sqlcmd.
Provider WMI SQL-DMO
Il provider WMI SQL-DMO non viene più utilizzato e non è disponibile.
SQL Mail
In SQL Server è supportato l'aggiornamento di SQL Mail da SQL Server 7.0 o SQL Server 2000. Per SQL Server 2005 è necessario installare Microsoft Outlook 2000 o versione successiva come client di posta elettronica.
Nota:
Questa funzionalità verrà rimossa in una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Per inviare posta elettronica da SQL Server 2005 utilizzare Posta elettronica database.
SQL Mail
Quando un client connesso tramite l'autenticazione di SQL Server tenta di inviare posta elettronica di SQL Mail contenente un allegato, SQL Server non è in grado di impostare un contesto di protezione appropriato e restituirà un errore. Per evitare questo problema utilizzare l'autenticazione di Windows.
API SQL Namespace (SQL-NS)
L'API SQL Namespace (SQL-NS) non è più utilizzata e non è disponibile.
Flag di traccia
In SQL Server 2000 un flag di traccia impostato nella sessione A non ha automaticamente effetto in una sessione B già esistente, ma ha effetto solo alla prima impostazione di un flag di traccia nella sessione B. Questo funzionamento è non deterministico in SQL Server 2000 e deterministico in SQL Server 2005. In SQL Server 2005 i flag di traccia globali impostati nella sessione A vengono impostati immediatamente in altre sessioni simultanee.
Inoltre in SQL Server 2005 i flag di traccia possono essere specificati come locali o globali utilizzando un argomento aggiuntivo nell'istruzione DBCC TRACEON. Se il secondo argomento non è specificato il valore predefinito è locale in SQL Server 2005, mentre in SQL Server 2000 è globale.
Per ulteriori informazioni, vedere Flag di traccia (Transact-SQL).
Flag di traccia
Alcuni flag di traccia di SQL Server 2000 non esistono in SQL Server 2005. La funzionalità di alcuni di essi è inoltre cambiata in SQL Server 2005. È opportuno disattivare tutti i flag di traccia prima di eseguire l'aggiornamento a SQL Server 2005. Dopo l'aggiornamento verificare che la funzionalità del flag di traccia non sia cambiata e che il flag di traccia sia ancora necessario prima di riattivare i flag di traccia.
Trigger
In SQL Server 2005 non è possibile eseguire le istruzioni DDL (Data Definition Language), ad esempio CREATE INDEX, nelle tabelle inserted e deleted all'interno dei trigger DML. Nelle versioni precedenti di SQL Server è possibile invece eseguire alcune istruzioni DDL nelle tabelle inserted e deleted. Per ulteriori informazioni, vedere Utilizzo delle tabelle inserted e deleted.
Nomi di indici duplicati
Non sono consentiti i nomi di indici di tabella o di vista duplicati in SQL Server 2005. Prima di eseguire l'aggiornamento rinominare gli indici per eliminare i duplicati.
Per trovare gli indici duplicati eseguire la query seguente:
SELECT DISTINCT OBJECT_NAME(o.id), name FROM sysindexes as o WHERE EXISTS (SELECT name FROM sysindexes as i WHERE i.id = o.id AND i.name = o.name and i.indid < o.indid);
Utilizzare sp_rename per cambiare uno dei nomi di indice. Poiché i nomi di indice sono uguali, non è possibile determinare quale indice verrà rinominato. Questa operazione consente quindi di differenziare gli indici.
EXEC sp_rename N'table_name.index_name', N'new_index_name, N'INDEX'
Per verificare quale indice è stato rinominato eseguire la query seguente, che restituisce tutti gli indici, inclusi i nomi delle colonne chiave sulla tabella o vista specificata:
SELECT i.name AS IndexName, c.name AS ColumnName, ik.colid, ik.keyno FROM sysindexes i JOIN sysindexkeys ik ON i.id = ik.id and i.indid = ik.indid JOIN syscolumns c ON c.id = ik.id and ik.colid = c.colid WHERE i.id = OBJECT_ID('table_or_view_name')
Se necessario, utilizzare nuovamente sp_rename per correggere i nomi di indice.
Nomi di oggetti
In SQL Server 2005 non è possibile utilizzare il carattere 0xFFFF nei nomi di oggetti. Non è possibile accedere a un nome di oggetto contenente questo carattere Unicode quando per il database è impostato il livello di compatibilità 90. Rinominare gli oggetti che contengono questo carattere.
Variabili di tabella e corrispondenza delle regole di confronto delle colonne
In SQL Server 2000 le colonne definite nelle variabili di tabella sono convertite in modo implicito nelle regole di confronto del database tempdb. In SQL Server 2005 le colonne definite nelle variabili di tabella sono convertite in modo implicito nelle regole di confronto del database corrente. Le query basate su SQL Server 2000 possono restituire risultati imprevisti, ad esempio un numero o un ordine di righe restituite diverso.
Il confronto di uguaglianza delle colonne c1
e c2
nella clausola WHERE della seguente istruzione SELECT può ad esempio restituire un numero maggiore o minore di righe se vengono utilizzate le regole di confronto del database TestDB
anziché quelle di tempdb. Ad esempio, i valori 'Name' e 'name' vengono considerati uguali se le regole di confronto non prevedono la distinzione tra maiuscole e minuscole, mentre vengono considerati differenti se le regole di confronto prevedono tale distinzione.
CREATE DATABASE TestDB COLLATE Estonian_CS_AI;
GO
USE TestDB;
DECLARE @TempTable table (c1 varchar(10), c2 varchar(10);
SELECT * FROM @TempTable WHERE c1 = c2;
Per utilizzare regole di confronto diverse da quelle del database corrente in una variabile di tabella, specificarle nella definizione delle colonne nell'istruzione DECLARE o nella query che fa riferimento alle colonne. Nell'esempio seguente vengono illustrati entrambi i metodi.
USE TestDB;
DECLARE @TempTable table (c1 varchar(10)COLLATE Latin1_General_CS_AS, c2 varchar(10)COLLATE Latin1_General_CS_AS);
SELECT * FROM @TempTable WHERE c1 = c2;
GO
-- or
DECLARE @TempTable table (c1 varchar(10), c2 varchar(10));
SELECT * FROM @TempTable WHERE c1 = c2 COLLATE Latin1_General_CS_AS;
GO
Viste indicizzate
Funzionalità | Descrizione |
---|---|
Determinismo delle funzioni |
Le espressioni di funzione seguenti vengono considerate non deterministiche in SQL Server 2005 e, pertanto, possono interferire con la creazione di viste indicizzate:
Le espressioni che prevedono la conversione implicita di stringhe di caratteri nel tipo di dati datetime o smalldatetime sono considerate non deterministiche in SQL Server 2005, a meno che il livello di compatibilità non sia impostato su 80 o inferiore, in quanto i risultati dipendono dalle impostazioni LANGUAGE e DATEFORMAT della sessione del server. I risultati dell'espressione Anche la conversione implicita di dati di tipo carattere non Unicode tra regole di confronto viene considerata non deterministica, a meno che il livello di compatibilità non sia impostato su 80 o inferiore. La creazione di indici in viste che contengono queste espressioni non è consentita al livello di compatibilità del database 90. Sebbene sia possibile mantenere le viste esistenti contenenti queste espressioni da un database aggiornato, Query Optimizer non le considera nei piani di query al livello di compatibilità 80 o 90. Per informazioni sull'impostazione del livello di compatibilità, vedere sp_dbcmptlevel (Transact-SQL). Nella definizione di viste indicizzate in SQL Server 2005 è opportuno convertire in modo esplicito il valore letterale nel tipo di data preferita tramite uno stile deterministico di formato data. Per un elenco degli stili del formato di data deterministici, vedere CAST e CONVERT (Transact-SQL). L'utilizzo di conversioni implicite stringa-data in viste indicizzate esistenti aggiornate a SQL Server 2005 garantirà la consistenza delle impostazioni LANGUAGE e DATEFORMAT nei database e nelle applicazioni e consentirà di evitare il possibile danneggiamento delle viste indicizzate. |
IGNORE_DUP_KEY |
Quando si crea un indice cluster univoco su una vista in SQL Server 2005 è necessario impostare l'opzione IGNORE_DUP_KEY su OFF. Questa è l'impostazione predefinita. L'impostazione di IGNORE_DUP_KEY su ON potrebbe danneggiare le viste indicizzate. Eliminare l'indice cluster sulla vista e ricrearlo senza specificare l'opzione IGNORE_DUP_KEY. |
Hint per query |
Gli hint per query nelle definizioni delle viste indicizzate vengono ignorati al livello di compatibilità 80. In alcune applicazioni ciò potrebbe causare un comportamento diverso tra i livelli di compatibilità 80 e 90. Per ulteriori informazioni, vedere Progettazione di viste indicizzate, Creazione di viste indicizzate e query_hint (Transact-SQL). |
Protezione
Funzionalità | Descrizione |
---|---|
Nomi di account di accesso |
I nomi dei ruoli predefiniti del server riportati di seguito sono riservati in SQL Server 2005 e non possono essere utilizzati come nomi di account di accesso definiti dall'utente:
Prima di eseguire l'aggiornamento a SQL Server 2005 eseguire la procedura seguente:
|
ID di protezione (SID) dell'account di accesso |
Gli ID di protezione (SID) duplicati non sono consentiti in SQL Server 2005. Eliminare uno degli account di accesso e gli utenti associati prima di eseguire l'aggiornamento. |
Mapping di account di accesso remoto |
Nelle versioni precedenti di SQL Server gli account di accesso di istanze remote di SQL Server possono essere contrassegnati come trusted utilizzando la stored procedure di sistema sp_remoteoption. Questo metodo di identificazione degli account di accesso remoto non è supportato in SQL Server 2005. Gli account di accesso remoto non verranno più contrassegnati come trusted dopo l'aggiornamento a SQL Server 2005. Utilizzare server collegati e stored procedure di server collegati per impostare e gestire gli account di accesso remoto. Per ulteriori informazioni, vedere Collegamento di server. |
Account di accesso di SQL Server 6.5 |
In SQL Server 6.5 le password vengono salvate in un formato hash che non è più supportato. Non è possibile aggiornare la vecchia password direttamente a SQL Server 2005. Per attivare questo account di accesso è necessario reimpostarne la password. Utilizzare ALTER LOGIN per reimpostare la password:
La nuova password verrà convalidata in base ai criteri di complessità delle password del sistema, a meno che il controllo dei criteri non sia disattivato. È consigliabile utilizzare password complesse e non disattivare il controllo dei criteri. L'opzione MUST_CHANGE impone all'utente la selezione di una nuova password. Tale procedura non è necessaria ma è consigliabile. Per identificare gli account di accesso di SQL Server 6.5 inattivi utilizzare la query seguente:
|
Nome utente sys |
In SQL Server 2005 il nome sys è riservato e non può essere utilizzato come nome utente. Rinominare l'utente prima di eseguire l'aggiornamento a SQL Server 2005. Se l'utente non viene rinominato, il database si troverà in stato sospetto dopo il processo di aggiornamento e non sarà disponibile finché non viene portato in linea. Procedura precedente all'aggiornamento In ogni database contenente l'utente sys effettuare quanto segue prima dell'aggiornamento a SQL Server 2005:
Procedura successiva all'aggiornamento Se l'utente sys non è stato rinominato prima dell'aggiornamento, eseguire la procedura seguente:
|
Oggetti di sistema e metadati
Funzionalità | Descrizione |
---|---|
INFORMATION_SCHEMA.COLUMNS |
In SQL Server 2005 la colonna ORDINAL_POSITION della vista INFORMATION_SCHEMA.COLUMNS non è compatibile con lo schema di bit restituito dalla funzione COLUMNS_UPDATED. Per ottenere uno schema di bit compatibile con COLUMNS_UPDATED fare riferimento alla proprietà ColumnID della funzione di sistema COLUMNPROPERTY durante una query sulla vista INFORMATION_SCHEMA.COLUMNS, come illustrato nell'esempio seguente:
|
INFORMATION_SCHEMA.SCHEMATA |
Nelle versioni precedenti di SQL Server la vista INFORMATION_SCHEMA.SCHEMATA restituisce tutti i database inclusi in un'istanza di SQL Server, mentre in SQL Server 2005 la vista restituisce tutti gli schemi di un database. Questo funzionamento è conforme allo standard SQL. Per ulteriori informazioni, vedere SCHEMATA (Transact-SQL). |
Nomi delle colonne di INFORMATION_SCHEMA che corrispondono al valore '%SCHEMA' |
Nelle versioni precedenti di SQL Server i nomi delle colonne di INFORMATION_SCHEMA corrispondenti al valore '%SCHEMA' restituiscono il nome dell'utente, mentre in SQL Server 2005 tali colonne restituiscono il nome dello schema. Quando un database viene aggiornato a SQL Server 2005, il nome dello schema rimane identico a quello dell'utente e tutte le applicazioni che fanno riferimento a queste colonne non avranno esito negativo. Gli utenti che tuttavia implementano le funzionalità di separazione schema-utente di SQL Server 2005 nei propri database devono rendersi conto che l'applicazione potrebbe avere esito negativo se i dati previsti corrispondono a un nome utente anziché a un nome di schema. Per ulteriori informazioni, vedere Separazione fra schema e utente. |
sp_helptrigger |
In SQL Server 2005 la colonna trigger_schema viene aggiunta come ultima colonna nel set di risultati restituito dalla stored procedure di sistema sp_helptrigger. Controllare l'utilizzo di sp_helptrigger nelle applicazioni. Può essere necessario modificare le applicazioni in modo da gestire la colonna aggiuntiva. In alternativa è possibile utilizzare la vista del catalogo sys.triggers. |
syslockinfo e sp_lock |
In SQL Server 2000 le colonne rsc_objid e rsc_indid in syslockinfo e le colonne objid e indid in sp_lock restituiscono in modo coerente l'ID oggetto e l'ID indice. In SQL Server 2005 è possibile che venga restituito un valore pari a 0. In SQL Server 2000 syslockinfo e sp_lock restituiscono un massimo di due righe per qualsiasi risorsa di blocco specifica in un'unica transazione. In SQL Server 2005, quando il partizionamento dei blocchi è attivato, è possibile che vengano restituite più righe per la stessa risorsa eseguita in una transazione. È possibile che vengano restituite fino a N + 1 righe, dove N è il numero di CPU. Inoltre in SQL Server 2005 le richieste GRANTED e WAITING possono essere visualizzate per la stessa risorsa, mentre in SQL Server 2000tali richieste non possono essere visualizzate per la stessa risorsa. Per ulteriori informazioni, vedere sp_lock (Transact-SQL) e sys.syslockinfo (Transact-SQL). |
Corrispondenza delle regole di confronto tra i nomi degli oggetti di sistema e i nomi dei tipi di sistema |
Nelle versioni precedenti di SQL Server per la corrispondenza tra i nomi degli oggetti di sistema e dei tipi di sistema vengono utilizzate le regole di confronto del database master. In SQL Server 2005 viene eseguito il cast automatico dei nomi degli oggetti e dei tipi di sistema nelle regole di confronto del database corrente. Se i riferimenti a tali oggetti nei propri script o applicazioni non corrispondono ai riferimenti nel catalogo e le regole di confronto del database corrente operano la distinzione tra maiuscole e minuscole, lo script o l'applicazione può avere esito negativo. Ad esempio, l'istruzione |
Modifica di oggetti di sistema |
Gli aggiornamenti diretti del catalogo di sistema non sono consentiti in SQL Server 2005. Qualsiasi tentativo restituirà l'errore seguente: "Server: Msg 259, Level 16, State 1, Line 1" "Gli aggiornamenti ad hoc dei cataloghi di sistema non sono consentiti." Modificare gli script SQL in modo da utilizzare API ufficiali e documentate. Utilizzare ad esempio ALTER DATABASE database_name SET EMERGENCY anziché eseguire un'istruzione UPDATE sulla tabella di sistema sysdatabases. |
Eliminazione di oggetti di sistema |
Non è possibile utilizzare istruzioni quali DROP TABLE, DROP PROCEDURE e sp_dropextendedproc per rimuovere oggetti di sistema, poiché tali oggetti vengono distribuiti nel database delle risorse di sola lettura. Rimuovere dalle applicazioni tutte le istruzioni che tentano di eliminare oggetti di sistema. Modificare le applicazioni in modo da revocare o negare l'autorizzazione EXECUTE sugli oggetti di sistema. In alternativa è possibile utilizzare uno degli strumenti di Configurazione superficie di attacco in SQL Server 2005 per disattivare alcuni di questi oggetti. Ad esempio, è possibile attivare o disattivare la stored procedure estesa xp_cmdshell utilizzando uno degli strumenti di Configurazione superficie di attacco. |
sysperfinfo |
In SQL Server 2005 sysperfinfo restituisce un valore bigint per la colonna cntr_value. Modificare le applicazioni che utilizzano sysperfinfo per accertarsi che siano in grado di gestire i valori bigint della colonna cntr_value. In SQL Server 2005 sysperfinfo è una vista di compatibilità. È consigliabile utilizzare invece la vista a gestione dinamica sys.dm_os_performance_counters. |
Tabelle di sistema sulle quali vengono eseguite query utilizzando 'dbo' nei criteri di ricerca |
Nelle versioni precedenti di SQL Server gli oggetti di sistema sono di proprietà di dbo e risiedono nel database master. In SQL Server 2005 gli oggetti di sistema sono di proprietà di sys e sono inclusi in modo logico in tutti i database. Le istruzioni che eseguono query su tabelle di sistema e che includono l'utente dbo nei criteri di ricerca avranno quindi esito negativo. |
Transact-SQL
Funzionalità | Descrizione |
---|---|
@@VERSION |
SQL Server 2005 restituisce informazioni più dettagliate di SQL Server 2000, nel formato major.minor.build.incremental-build. |
CREATE STATISTICS |
La specifica dell'opzione WITH ROWS in istruzioni CREATE STATISTICS non è supportata in SQL Server 2005. Modificare le istruzioni CREATE STATISTICS che includono WITH ROWS specificando SAMPLE number tra WITH e ROWS oppure altre opzioni conformi alla sintassi documentata. |
DISK INIT |
L'istruzione DISK INIT, utilizzata nelle versioni precedenti di SQL Server per creare periferiche di database o di log delle transazioni, è stata rimossa da SQL Server 2005. Sostituire tutte le occorrenze di questa istruzione con istruzioni CREATE DATABASE o ALTER DATABASE equivalenti. |
Operatore UNION all'interno di un'istruzione INSERT INTO...SELECT |
Quando viene inserito un operatore UNION all'interno di un'istruzione INSERT, SQL Server 2005 esegue un cast indipendente del tipo di dati di ogni operazione UNION, in base alle regole della conversione del tipo di dati. Viene quindi eseguito il cast dei tipi di dati del risultato finale dell'operazione UNION alle colonne corrispondenti della tabella di destinazione dell'operazione INSERT. Questa differenza di funzionamento può generare errori di cast del tipo di dati nelle applicazioni. Nell'esempio seguente viene dimostrato un errore di cast del tipo di dati. A livelli di compatibilità 80 o inferiori, viene eseguito il cast diretto della costante integer
|
UPDATETEXT |
SQL Server 2005 non supporta i puntatori di testo nelle istruzioni UPDATETEXT che leggono e scrivono gli stessi dati BLOB (Binary Large Objects) utilizzando lo stesso puntatore di testo. Copiare i dati BLOB in una tabella temporanea o in una variabile di tabella e quindi riassegnare il valore alla colonna originale. |
Parola chiave WITH utilizzata con gli hint di tabella |
In SQL Server 2005, con alcune eccezioni, gli hint di tabella sono supportati nella clausola FROM di una query solo se vengono specificati tramite la parola chiave WITH. Per ulteriori informazioni, vedere FROM (Transact-SQL) e table_hint (Transact-SQL). |
ORDER BY nella definizione di una vista |
In SQL Server 2005 la clausola ORDER BY nella definizione di una vista viene utilizzata esclusivamente per determinare le righe restituite dalla clausola TOP. La clausola ORDER BY non garantisce risultati ordinati in caso di query sulla vista, a meno che tale clausola non venga specificata anche nella query. |
UPDATE con hint di blocco |
In SQL Server 2000 non viene verificata la presenza di eventuali conflitti tra gli hint di blocco in un'istruzione UPDATE in presenza di entrambe le condizioni seguenti:
SQL Server ignora gli hint di blocco specificati nella clausola FROM e non genera un errore in caso di conflitto. Nelle stesse condizioni, in SQL Server 2005 se gli hint sono di blocco in conflitto viene restituito un errore. |
XML
Funzionalità | Descrizione |
---|---|
OPENXML |
A causa delle modifiche apportate a MSXML, OPENXML non supporta più i predicati basati sulla posizione diversi da integer. In SQL Server 2005 MSXML 3.0 è il motore sottostante utilizzato per l'elaborazione di espressioni XPath incluse in query OPENXML. MSXML 3.0 include un motore XPath 1.0 maggiormente conforme in cui la semantica dei valori diversi da integer in predicati posizionali è cambiata. Ad esempio, l'espressione XPath seguente |
Espressioni XPath OPENXML |
MSXML 3.0 include un motore XPath 1.0 più restrittivo che non supporta più le funzioni seguenti:
Per format-number() e formatNumber() è possibile utilizzare Transact-SQL. Non esiste una soluzione diretta per le altre funzioni non supportate. |
Tipo 'xml' definito dall'utente |
xml è un tipo di sistema riservato in SQL Server 2005. Utilizzare sp_rename per rinominare il tipo prima o dopo l'aggiornamento e modificare l'applicazione in modo che possa funzionare con il nuovo nome di tipo. |
Vedere anche
Riferimento
Differenze di funzionamento delle funzionalità del Motore di database in SQL Server 2005
Funzionalità del Motore di database obsolete in SQL Server 2005
Funzionalità del Motore di database non più utilizzate in SQL Server 2005
Altre risorse
Compatibilità con le versioni precedenti del Motore di database di SQL Server 2005
sp_dbcmptlevel (Transact-SQL)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
17 novembre 2008 |
|
14 aprile 2006 |
|