Novità di SQLXML 4.0 SP1
Si applica a: SQL Server Database SQL di Azure
In Microsoft SQLXML 4.0 SP1 sono inclusi diversi aggiornamenti e miglioramenti. In questo argomento viene fornito un riepilogo degli aggiornamenti e vengono riportati i collegamenti a informazioni più dettagliate, se disponibili. In SQLXML 4.0 SP1 sono stati apportati ulteriori miglioramenti per supportare i nuovi tipi di dati introdotti in SQL Server 2008 (10.0.x). Vengono inoltre presentati gli argomenti seguenti:
Installazione di SQLXML 4.0 SP1
Problemi di installazione affiancata
SQLXML 4.0 e MSXML
Ridistribuzione di SQLXML 4.0
Supporto per SQL Server Native Client
Supporto per i tipi di dati introdotti in SQL Server 2005 (9.x)
Modifiche al caricamento bulk XML per SQLXML 4.0
Modifiche alle chiavi del Registro di sistema per SQLXML 4.0
Problemi di migrazione
Installazione di SQLXML 4.0 SP1
Prima di SQL Server 2008 (10.0.x), SQLXML 4.0 veniva rilasciato con SQL Server e apparteneva all'installazione predefinita di tutte le versioni di SQL Server, ad eccezione di SQL Server Express. A partire da SQL Server 2008 (10.0.x), l'ultima versione di SQLXML (SQLXML 4.0 SP1) non è più inclusa in SQL Server. Per installare SQLXML 4.0 SP1, scaricarlo dal Percorso di installazione per SQLXML 4.0 SP1.
I file di SQLXML 4.0 SP1 vengono installati nel percorso seguente:
%PROGRAMFILES%\SQLXML 4.0\
Nota
Tutte le impostazioni del Registro di sistema appropriate per SQLXML 4.0 vengono definite durante il processo di installazione.
Per consentire l'esecuzione delle applicazioni SQLXML a 32 bit in sistemi operativi WOW64 (Windows on Windows) a 64 bit, eseguire il pacchetto SQLXML 4.0 SP1 a 64 bit, denominato sqlxml4.msi, disponibile nell'Area download Microsoft.
Disinstallazione di SQLXML 4.0 SP1
In SQLXML 3.0 SP3, SQLXML 4.0 e SQLXML 4.0 SP1 sono presenti chiavi del Registro di sistema condivise. Se le versioni più recenti di SQLXML vengono disinstallate dallo stesso computer su cui è presente SQLXML 3.0 SP3, potrebbe essere necessario reinstallare quest'ultimo.
Problemi di installazione affiancata
Il processo di installazione di SQLXML 4.0 non determina la rimozione dei file installati da versioni precedenti di SQLXML. È pertanto possibile che in un computer siano presenti le DLL relative a installazioni di diverse versioni di SQLXML. È possibile eseguire installazioni side-by-side. In SQLXML 4.0 sono inclusi sia i PROGID dipendenti sia quelli indipendenti dalla versione. Per tutte le applicazioni di produzione è consigliabile usare i PROGID dipendenti dalla versione.
SQLXML 4.0 SP1 e MSXML
SQLXML 4.0 non prevede l'installazione di MSXML, In SQLXML 4.0 si utilizza MSXML 6.0, che viene installato come parte di SQL Server 2005 (9.x) o installazione successiva.
Ridistribuzione di SQLXML 4.0 SP1
Per distribuire SQLXML 4.0 SP1, usare il pacchetto del programma di installazione ridistribuibile. Un modo per installare più pacchetti in un'installazione che all'utente può sembrare singola consiste nell'usare la tecnologia del chainer e del programma di avvio automatico. Per altre informazioni, vedere Authoring a Custom Bootstrapper Package for Visual Studio 2005 e Aggiunta di prerequisiti personalizzati.
Se l'applicazione è destinata a una piattaforma diversa da quella su cui è stata sviluppata, è possibile scaricare versioni di sqlncli.msi per x64, Itanium e x86 dall'Area download Microsoft.
Sono anche disponibili programmi di installazione di ridistribuzione separati per MSXML 6.0 (msxml6.msi). Tali programmi sono disponibili nel CD del programma di installazione di SQL Server nel percorso seguente:
%CD%\Setup\
Questi file di installazione possono essere usati per installare MSXML 6.0 direttamente dal CD. Possono inoltre essere usati per ridistribuire liberamente MSXML 6.0 con SQLXML 4.0 SP1 con applicazioni personalizzate.
È inoltre necessario ridistribuire SQL Server Native Client se viene usato come provider di dati con l'applicazione. Per altre informazioni, vedere Installazione di SQL Server Native Client.
Supporto per SQL Server Native Client
SQLXML 4.0 supporta sia i provider di SQLOLEDB sia quelli di SQL Server Native Client. È consigliabile usare la stessa versione del provider di SQL Server Native Client e di SQL Server perché SQL Server Native Client è sviluppato per supportare tutti i nuovi tipi di dati forniti nel server, ad esempio i tipi di dati Date, Time, DateTime2 e dateTimeOffset in SQL Server 2008 (10.0.x) e supportati da SQL Server Native Client.
Nota
In SQL Server 2022 (16.x) è stato rimosso SQL Server Native Client.
SQL Server Native Client è una tecnologia di accesso ai dati introdotta in SQL Server 2005 (9.x). Questa tecnologia integra il provider SQLOLEDB e il driver SQLODBC in un'unica libreria a collegamento dinamico (DLL) nativa, offrendo contemporaneamente nuove funzionalità diverse da Microsoft Data Access Components (MDAC).
SQL Server Native Client può essere usato per creare nuove applicazioni o migliorare quelle esistenti che richiedono l'utilizzo delle funzionalità in SQL Server e non supportate da SQLOLEDB e SQLODBC in MDAC e Microsoft Windows. SQL Server Native Client è ad esempio necessario per consentire le funzionalità SQLXML lato client, come FOR XML, per usare il tipo di dati xml. Per altre informazioni, vedere Formattazione XML lato client (SQLXML 4.0), Uso di ADO per l'esecuzione di query SQLXML 4.0 e Programmazione di SQL Server Native Client.
Nota
SQLXML 4.0 non è completamente compatibile con la versione precedente SQLXML 3.0. A causa di alcune correzioni di bug e di altre modifiche funzionali, in modo specifico la rimozione del supporto ISAPI SQLXML, non è possibile usare le directory virtuali IIS con SQLXML 4.0. Anche se la maggior parte delle applicazioni viene eseguita con modifiche minori, è necessario testare le applicazioni prima di metterle in produzione con SQLXML 4.0.
Supporto per i tipi di dati introdotti in SQL Server 2005 e SQL Server 2008
SQL Server 2005 (9.x) ha introdotto il tipo di dati xml e SQLXML 4.0 supporta il tipo di dati xml. Per altre informazioni, vedere Supporto del tipo di dati xml in SQLXML 4.0.
Per esempi relativi all'utilizzo del tipo di dati xml in SQLXML in caso di mapping di viste XML, di caricamento bulk XML o di esecuzione di updategram XML, fare riferimento agli esempi forniti negli argomenti seguenti.
SQL Server 2008 (10.0.x) ha introdotto i tipi di date Date, Time, DateTime2 e DateTimeOffset. I quattro nuovi tipi di dati vengono abilitati come tipi scalari predefiniti quando SQLXML 4.0 SP1 viene usato con il provider OLE DB di SQL Server Native Client (SQLNCLI11), fornito con SQL Server 2012 (11.x).
Importante
SQL Server Native Client (SNAC) non viene fornito con:
- SQL Server 2022 (16.x) e versioni successive
- SQL Server Management Studio 19 e versioni successive
SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider OLE DB Microsoft legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni.
Per i nuovi progetti, usare uno dei driver seguenti:
Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni dal 2012 al 2019), vedere questa Eccezione relativa al ciclo di vita del supporto.
Modifiche al caricamento bulk XML per SQLXML 4.0 SP1
Per SQLXML 4.0, il campo di freccia di espansione SchemaGen viene creato usando il tipo di dati xml. Per altre informazioni, vedere Modello a oggetti di caricamento bulk in SQL Server XML.
Se sono state precedentemente create applicazioni Microsoft Visual Basic e si intende usare SQLXML 4.0, è necessario ricompilare l'applicazione con il riferimento a Xblkld4.dll.
Per le applicazioni Visual Basic, Scripting Edition è necessario registrare la DLL da usare. Nell'esempio seguente, se si specificano PROGID indipendenti dalla versione, l'applicazione dipende dall'ultima DLL registrata:
set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
Nota
Il PROGID dipendente dalla versione è SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.
Modifiche alle chiavi del Registro di sistema per SQLXML 4.0
In SQLXML 4.0 le chiavi del Registro di sistema sono state sostituite rispetto alle versioni precedenti dalle chiavi seguenti.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize
Se si desidera rendere effettive tali chiavi per SQLXML 4.0, è necessario modificare le impostazioni.
Con SQLXML 4.0 vengono inoltre introdotte le chiavi del Registro di sistema seguenti:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo
Per impostazione predefinita, SQLXML 4.0 restituisce informazioni sugli errori nativi fornite da OLE DB e SQL Server, anziché un errore SQLXML di livello elevato (come nel caso delle versioni precedenti di SQLXML). Per evitare questo comportamento, il valore di questa chiave del Registro di sistema di tipo DWORD deve essere impostato su 0 (l'impostazione predefinita è 1).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces
Per impostazione predefinita, SQLXML restituisce i valori GUID di SQL Server senza racchiuderli fra parentesi graffe. Se si vuole che il valore GUID sia restituito con le parentesi graffe (ad esempio {alcuni GUID}), il valore di questa chiave del Registro di sistema deve essere impostato su 1 (il valore predefinito è 0).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
Per impostazione predefinita, quando il parser XML carica i dati, gli spazi vuoti vengono normalizzati in base alle regole di XML 1.0. In questo modo vengono persi alcuni degli spazi vuoti nei dati. La rappresentazione testuale dei dati potrebbe pertanto non essere uguale dopo l'analisi, anche se i dati rimarranno invariati dal punto di vista semantico.
Questa chiave viene introdotta in modo che sia possibile scegliere di mantenere gli spazi vuoti nei dati. Se si aggiunge tale chiave del Registro di sistema e se ne imposta il valore su 0, gli spazi vuoti (LF, CR e TAB) nei dati XML vengono restituiti codificati nel caso di valori di attributi. Nel caso di valori di elementi, solo il carattere CR viene restituito codificato.
Ad esempio:
CREATE TABLE T( Col1 int, Col2 nvarchar(100)); GO -- Insert data with tab, line feed and carriage return). INSERT INTO T VALUES (1, 'This is a tab . This is a line feed and CR more text'); GO -- Test this query (without the registry key). SELECT * FROM T FOR XML AUTO; -- This is the result (no encoding of special characters). <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Now add registry key with value 0 and execute the query again. -- Note the encoding for carriage return, line-feed and tab in the attribute value. <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Update the query and specify ELEMENTS directive SELECT * FROM T FOR XML AUTO, ELEMENTS -- Only the carriage return is returned encoded. <?xml version="1.0" encoding="utf-8" ?> <r> <T> <Col1>1</Col1> <Col2>This is a tab . This is a line feed and CR more text</Col2> </T> </r>
Problemi di migrazione
Di seguito vengono riportati i problemi che potrebbero avere un impatto sulla migrazione delle applicazioni SQLXML legacy a SQLXML 4.0.
Query ADO e SQLXML 4.0
Nelle versioni precedenti di SQLXML viene fornito il supporto per l'esecuzione di query basate sull'URL mediante le directory virtuali IIS e il filtro ISAPI SQLXML. Per le applicazioni che usano SQLXML 4.0 questo supporto non è più disponibile.
Gli updategram, i modelli e le query SQLXML possono invece essere eseguiti usando le estensioni SQLXML di ActiveX Data Objects (ADO), introdotte per la prima volta con Microsoft Data Access Components (MDAC) 2.6 e versioni successive.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Supporto per ISAPI SQLXML 3.0 e per i tipi di dati introdotti in SQL Server 2005
Poiché il supporto ISAPI è stato rimosso da SQLXML 4.0, se la soluzione richiede le funzionalità avanzate relative ai tipi di dati introdotte in SQL Server 2005 (9.x), ad esempio il tipo di dati xml o i tipi di dati definiti dall'utente (UDT) e l'accesso basato sul Web, sarà necessario usare un'altra soluzione, ad esempio le classi gestite SQLXML o un altro tipo di gestore HTTP, ad esempio Servizi Web XML nativi per SQL Server 2005.
In alternativa, se queste estensioni di tipo non sono necessarie, è possibile continuare a usare SQLXML 3.0 per connettersi alle installazioni di SQL Server 2005 (9.x) e di SQL Server 2008 (10.0.x). Il supporto ISAPI SQLXML 3.0 funziona con le versioni più recenti, ma non supporta o riconosce il tipo di dati xml o il supporto ai tipi definiti dall'utente (UDT) introdotti in SQL Server 2005 (9.x).
Modifiche alla sicurezza del caricamento bulk XML per i file temporanei
Per SQLXML 4.0 e SQL Server, le autorizzazioni per i file del caricamento bulk XML vengono concesse all'utente che esegue l'operazione di caricamento bulk. Le autorizzazioni di lettura e scrittura vengono ereditate dal file system. Nelle versioni precedenti di SQLXML e SQL Server, il caricamento bulk XML in SQLXML crea file temporanei non protetti che potrebbero essere letti da chiunque.
Problemi di migrazione per FOR XML sul lato client
A causa delle modifiche apportate al motore di esecuzione, SQL Server potrebbe restituire valori diversi nei metadati di una tabella di base rispetto a quelli che verrebbero restituiti se la query FOR XML fosse eseguita in SQL Server 2000 (8.x). In questi casi, la formattazione sul lato client dei risultati della query FOR XML presenterà un output differente, a seconda della versione sulla quale viene eseguita la query.
Se una query FOR XML viene eseguita lato client usando SQLXML 3.0 su una colonna con tipo di dati xml, i dati dei risultati verranno restituiti sotto forma di stringa completamente sostituita da entità. In SQLXML 4.0, se SQL Server Native Client (SQLNCLI11) viene specificato come provider, i dati verranno restituiti come XML.