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.

ms143179.note(it-it,SQL.90).gifNota:

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:

  • Vengono creati e mantenuti metadati di sistema aggiuntivi nel filegroup PRIMARY di ogni database utente per gli oggetti di database e le autorizzazioni utente. Ad esempio, nelle versioni precedenti di SQL Server le autorizzazioni associate a un utente che concede le autorizzazioni o a un utente autorizzato vengono archiviate su un'unica riga come bitmap, mentre in SQL Server 2005 la bitmap viene estesa su più righe.
  • Le colonne LOB (Large Object) definite come tipi di dati text, ntext o image necessitano di altri 40 byte di spazio su disco per colonna. Quest'unico aumento di spazio viene richiesto durante il primo aggiornamento di ogni colonna LOB.
  • La mappa ID (DOCID) del documento full-text è archiviata nel file di dati anziché nel catalogo full-text.

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:

  • Dimensione minima più elevata.
  • Il livello di compatibilità è impostato su 90.
  • L'opzione di database PAGE_VERIFY è impostata su CHECKSUM.

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:

  1. Per eliminare la stored procedure estesa eseguire sp_dropextendedproc.
  2. 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.

ms143179.note(it-it,SQL.90).gifNota:

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.

  1. 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);
    
  2. 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'
    
  3. 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')
    
  4. 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:

  • Riferimenti a valori letterali stringa convertiti in modo implicito in datetime e smalldatetime.
  • Conversione implicita di dati di tipo carattere non Unicode tra regole di confronto.

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 CONVERT (datetime, '30 listopad 1996', 113) dipendono ad esempio dall'impostazione LANGUAGE perché la stringa 'listopad' indica mesi diversi in varie lingue. Analogamente, nell'espressione DATEADD(mm,3,'2000-12-01') SQL Server interpreta la stringa '2000-12-01' sulla base dell'impostazione DATEFORMAT.

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:

  • sysadmin
  • serveradmin
  • setupadmin
  • securityadmin
  • processadmin
  • dbcreator
  • diskadmin
  • bulkadmin

Prima di eseguire l'aggiornamento a SQL Server 2005 eseguire la procedura seguente:

  1. Prendere nota degli identificatori di protezione (SID) degli account di accesso utilizzando l'istruzione seguente:

    SELECT name, sid 
    FROM master.dbo.syslogins 
    WHERE name IN('sysadmin', 'serveradmin','setupadmin',
     'securityadmin','processadmin', 'dbcreator','diskadmin',
     'bulkadmin')
  2. Eliminare gli account di accesso.
  3. Utilizzare la procedura di sistema sp_addlogin per creare nuovi account di accesso. Nel parametro @sid di ciascun account di accesso corrispondente specificare il SID restituito nel passaggio 1.

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:

ALTER LOGIN <login name> WITH PASSWORD = '<new password>' MUST_CHANGE

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:

SELECT * FROM sysxlogins WHERE (xstatus & 2048) = 2048;
GO

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:

  1. Creare un nuovo utente.
  2. Utilizzare le istruzioni seguenti per visualizzare tutte le autorizzazioni concesse dall'utente sys e concesse all'utente sys.

    -- Return permissions granted by user sys.
    SELECT * FROM sysprotects WHERE grantor = USER_ID('sys')
    -- Return permissions granted to user sys.
    SELECT * FROM sysprotects WHERE uid = USER_ID('sys')
  3. Per trasferire al nuovo utente la proprietà di tutti gli oggetti di proprietà dell'utente sys utilizzare sp_changeobjectowner.
  4. Eliminare l'utente sys.
  5. Per ripristinare le autorizzazioni originali acquisite nel passaggio 2 utilizzare la clausola AS new_user dell'istruzione GRANT.
  6. Modificare gli script in modo che facciano riferimento al nuovo utente.

Procedura successiva all'aggiornamento

Se l'utente sys non è stato rinominato prima dell'aggiornamento, eseguire la procedura seguente:

  1. Eseguire l'istruzione ALTER DATABASE db_name SET ONLINE. Il database sarà in modalità SINGLE_USER.
  2. Seguire tutti i passaggi riportati nella sezione "Procedura precedente all'aggiornamento".
  3. Eseguire l'istruzione ALTER DATABASE db_name SET MULTI_USER.

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:

SELECT TABLE_NAME, COLUMN_NAME,
    COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),
    COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contact';

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 EXEC SP_heLP non verrà eseguita se per il database corrente sono state definite regole di confronto con distinzione tra maiuscole e minuscole.

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 1 nella prima istruzione SELECT al tipo di dati della colonna di destinazione ReturnedValue, ovvero varchar(255). Al livello di compatibilità 90, il tipo di dati del set di risultati UNION viene determinato prima del cast alla colonna di destinazione. Il tipo di dati viene determinato come int per la seconda colonna nella prima istruzione SELECT. Il tipo di dati viene determinato come varchar(4) per la seconda colonna nella seconda istruzione SELECT. Poiché il tipo di dati int ha un livello di precedenza superiore rispetto al tipo di dati varchar(4), quando vengono determinati i tipi di dati del set di risultati UNION verrà eseguito il cast del valore test al tipo di dati int, generando un errore di conversione del tipo di dati.

CREATE TABLE #test(ReturnedName varchar(255) NOT NULL,
  ReturnedValue varchar(255) NULL)
INSERT INTO #test 
SELECT 'col1', 1
UNION ALL
SELECT 'test', 'test'
DROP TABLE #test

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:

  • La tabella nella clausola FROM è associata a un alias.
  • Alla stessa tabella viene fatto riferimento come destinazione dell'istruzione UPDATE senza un alias.

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 a[5.1] non restituirà alcun elemento anziché il quinto elemento <a>. Per risolvere questo problema utilizzare direttamente il valore arrotondato. Modificare l'espressione dell'esempio precedente in a[5].

Espressioni XPath OPENXML

MSXML 3.0 include un motore XPath 1.0 più restrittivo che non supporta più le funzioni seguenti:

  • format-number()
  • formatNumber()
  • current()
  • element-available()
  • function-available()
  • system-property()

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

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

17 novembre 2008

Nuovo contenuto:
  • Aggiunta nella sezione Funzionalità di una voce relativa alla corrispondenza delle regole di confronto delle colonne nelle variabili di tabella.

14 aprile 2006

Nuovo contenuto:
  • Aggiunta nella sezione Transact-SQL di una voce relativa all'utilizzo della clausola ORDER BY nella definizione di una vista.
  • Aggiunta di una voce nella sezione Transact-SQL relativa agli hint di blocco con l'istruzione UPDATE.