Nyheter i SQLXML 4.0 SP1
gäller för:SQL Server
Azure SQL Database
Microsoft SQLXML 4.0 SP1 innehåller olika uppdateringar och förbättringar. Det här avsnittet sammanfattar uppdateringarna och innehåller länkar till mer detaljerad information, där det är tillgängligt. SQLXML 4.0 SP1 ger ytterligare förbättringar för att stödja de nya datatyper som introducerades i SQL Server 2008 (10.0.x). Det här avsnittet innehåller följande ämnen:
Installera SQLXML 4.0 SP1
Problem med att installera sida vid sida
SQLXML 4.0 och MSXML
Omdistribuera SQLXML 4.0
Stöd för den interna SQL Server-klienten
Stöd för datatyper som introduceras i SQL Server 2005 (9.x)
Xml-massinläsningsändringar för SQLXML 4.0
Registernyckeländringar för SQLXML 4.0
Migreringsproblem
Installera SQLXML 4.0 SP1
Innan SQL Server 2008 (10.0.x) släpptes SQLXML 4.0 med SQL Server och ingick i standardinstallationen av alla SQL Server-versioner förutom SQL Server Express. Från och med SQL Server 2008 (10.0.x) ingår inte längre den senaste versionen av SQLXML (SQLXML 4.0 SP1) i SQL Server. Om du vill installera SQLXML 4.0 SP1 laddar du ned det från Installationsplats för SQLXML 4.0 SP1.
SQLXML 4.0 SP1-filerna installeras på följande plats:
%PROGRAMFILES%\SQLXML 4.0\
Not
Alla lämpliga registerinställningar för SQLXML 4.0 görs som en del av installationsprocessen.
Om du vill tillåta att 32-bitars SQLXML-program körs under Windows på Windows (WOW64) på 64-bitars Windows-operativsystem kör du 64-bitars SQLXML 4.0 SP1-paketet med namnet sqlxml4.msi, som finns i Download Center.
Avinstallera SQLXML 4.0 SP1
Delade registernycklar finns mellan SQLXML 3.0 SP3, SQLXML 4.0 och SQLXML 4.0 SP1. Om de senare versionerna av SQLXML avinstalleras på samma dator som innehåller SQLXML 3.0 SP3 kan du behöva installera om SQLXML 3.0 SP3.
Problem med att installera sida vid sida
Installationsprocessen för SQLXML 4.0 tar inte bort de filer som installerades av tidigare versioner av SQLXML. Därför kan du ha DLL:er för flera olika versionsutpräglade installationer av SQLXML på datorn. Du kan köra installationerna sida vid sida. SQLXML 4.0 innehåller både versionsoberoende och versionsberoende PROGID:er. Alla produktionsprogram bör använda versionsberoende PROGID:er.
SQLXML 4.0 SP1 och MSXML
SQLXML 4.0 installerar inte MSXML. SQLXML 4.0 använder MSXML 6.0, som installeras som en del av SQL Server 2005 (9.x) eller senare installation.
Omdistribuera SQLXML 4.0 SP1
Du kan distribuera SQLXML 4.0 SP1 med hjälp av det omdistribuerbara installationspaketet. Ett sätt att installera flera paket i vad som verkar vara en enda installation är att använda chainer- och bootstrapper-teknik. Mer information finns i Redigera ett anpassat Bootstrapper-paket för Visual Studio 2005 och Lägga till anpassade förutsättningar.
Om ditt program är avsett för en annan plattform än den som den utvecklades på kan du ladda ned versioner av sqlncli.msi för x64, Itanium och x86 från Microsoft Download Center.
Det finns också separata omdistributionsinstallationsprogram för MSXML 6.0 (msxml6.msi). Dessa finns på SQL Server-installations-CD:n på följande plats:
%CD%\Setup\
Dessa installationsfiler kan användas för att installera MSXML 6.0 direkt från CD:n. De kan också användas för att fritt omdistribuera MSXML 6.0 tillsammans med SQLXML 4.0 SP1 med dina egna anpassade program.
Du måste också omdistribuera den interna SQL Server-klienten om du använder den som dataprovider med ditt program. Mer information finns i Installing SQL Server Native Client.
Stöd för den interna SQL Server-klienten
SQLXML 4.0 stöder både SQLOLEDB- och SQL Server Native Client-providers. Vi rekommenderar att du använder samma version av SQL Server Native Client Provider och SQL Server eftersom SQL Server Native Client har utvecklats för att stödja alla nya datatyper som levereras på servern, till exempel Date, Time, DateTime2och dateTimeOffset datatyper i SQL Server 2008 (10.0.x) och stöds av SQL Server Native Client.
Not
SQL Server Native Client har tagits bort i SQL Server 2022 (16.x).
SQL Server Native Client är en dataåtkomstteknik som introducerades i SQL Server 2005 (9.x). Den kombinerar SQLOLEDB Provider och SQLODBC Driver till ett inbyggt DLL, samtidigt som den erbjuder nya funktioner som är separata och skiljer sig från Microsoft Data Access Components (MDAC).
Sql Server Native Client kan användas för att skapa nya program eller förbättra befintliga program som behöver dra nytta av funktioner som introduceras i SQL Server som inte stöds av SQLOLEDB och SQLODBC i MDAC och Microsoft Windows. Sql Server Native Client krävs till exempel för SQLXML-funktioner på klientsidan, till exempel FÖR XML, för att använda xml- datatyp. Mer information finns i XML-formatering på klientsidan (SQLXML 4.0), Använda ADO för att köra SQLXML 4.0-frågoroch SQL Server Native Client Programming.
Not
SQLXML 4.0 är inte helt bakåtkompatibel med SQLXML 3.0. På grund av vissa felkorrigeringar och andra funktionella ändringar, särskilt borttagning av STÖD för SQLXML ISAPI, kan du inte använda virtuella IIS-kataloger med SQLXML 4.0. Även om de flesta program körs med mindre ändringar måste du testa dem innan du sätter dem i produktion med SQLXML 4.0.
Stöd för datatyper som introduceras i SQL Server 2005 och SQL Server 2008
SQL Server 2005 (9.x) introducerade xml- datatyp och SQLXML 4.0 stöder xml- datatyp. Mer information finns i xml-datatypsstöd i SQLXML 4.0.
Exempel på hur du använder XML--datatypen i SQLXML vid mappning av XML-vyer, massinläsning av XML eller körning av XML-uppdateringsgram hittar du i exemplen i följande avsnitt.
SQL Server 2008 (10.0.x) introducerade datatyperna Date, Time, DateTime2och DateTimeOffset. SQLXML 4.0 SP1 aktiverar dessa fyra nya datatyper som inbyggda skalärtyper när de används med SQL Server Native Client OLE DB Provider (SQLNCLI11), som levereras i SQL Server 2012 (11.x).
Viktig
SQL Server Native Client (SNAC) levereras inte med:
- SQL Server 2022 (16.x) och senare versioner
- SQL Server Management Studio 19 och senare versioner
SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.
För nya projekt, använd en av följande drivrutiner:
För SQLNCLI som levereras som en komponent i SQL Server Database Engine (versioner 2012 till och med 2019), se det här undantaget i Support Lifecycle .
Xml-massinläsningsändringar för SQLXML 4.0 SP1
För SQLXML 4.0 skapas SchemaGen overflow field med hjälp av xml datatyp. Mer information finns i SQL Server XML-objektmodell för massinläsning.
Om du tidigare har skapat Microsoft Visual Basic-program och vill använda SQLXML 4.0 måste du kompilera om programmet med referens till Xblkld4.dll.
För Visual Basic Scripting Edition-program måste du registrera den DLL som du vill använda. Om du i följande exempel anger versionsoberoende PROGID:er beror programmet på den senast registrerade DLL:en:
set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
Not
Det versionsberoende PROGID är SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.
Registernyckeländringar för SQLXML 4.0
I SQLXML 4.0 har registernycklarna ändrats från de tidigare versionerna till följande:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize
Du måste ändra inställningarna om du vill att dessa nycklar ska gälla för SQLXML 4.0.
Dessutom introducerar SQLXML 4.0 följande registernycklar:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo
Som standard returnerar SQLXML 4.0 intern felinformation som tillhandahålls av OLE DB och SQL Server i stället för ett SQLXML-fel på hög nivå (vilket var fallet i tidigare versioner av SQLXML). Om du inte vill ha det här beteendet måste värdet för den här registernyckeln av typen DWORD anges till 0 (standardvärdet är 1).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces
Som standard returnerar SQLXML SQL Server GUID-värden utan de omslutande klammerparenteserna. Om du vill att GUID-värdet ska returneras med klammerparenteserna (till exempel {vissa GUID-}) måste värdet för den här registernyckeln anges till 1 (standardvärdet är 0).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
När XML-parsern läser in data normaliseras blanksteg som standard enligt XML 1.0-reglerna. Detta resulterar i förlust av några av blankstegstecken i dina data. Det innebär att textrepresentationen av dina data kanske inte är densamma efter parsning, även om data semantiskt är desamma.
Den här nyckeln introduceras så att du kan välja att behålla blankstegstecken i data. Om du lägger till den här registernyckeln och ställer in dess värde till 0, returneras blankstegstecken (LF, CR och flik) kodade i XML när de förekommer i attributvärden. Om det gäller elementvärden returneras endast CR-kodad.
Till exempel:
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>
Migreringsproblem
Följande är problem som kan påverka migreringen av dina äldre SQLXML-program till SQLXML 4.0.
ADO- och SQLXML 4.0-frågor
I tidigare versioner av SQLXML tillhandahölls stöd för URL-baserad frågekörning med hjälp av virtuella IIS-kataloger och SQLXML ISAPI-filtret. För program som använder SQLXML 4.0 är det här stödet inte längre tillgängligt.
I stället kan SQLXML-frågor, mallar och uppdateringsgram köras med hjälp av SQLXML-tilläggen till ActiveX Data Objects (ADO) som först introducerades i Microsoft Data Access Components (MDAC) 2.6 och senare.
Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.
Supportbarhet för SQLXML 3.0 ISAPI och datatyper som introducerades i SQL Server 2005
Eftersom ISAPI-stöd har tagits bort från SQLXML 4.0, Om din lösning kräver förbättrade funktioner för datainmatning som introducerades i SQL Server 2005 (9.x), till exempel XML-datatyp eller användardefinierade datatyper (UDT) och webbaserad åtkomst, måste du använda en annan lösning, till exempel SQLXML-hanterade klasser eller någon annan typ av HTTP-hanterare, till exempel interna XML-webbtjänster för SQL Server 2005.
Om du inte behöver dessa typtillägg kan du också fortsätta att använda SQLXML 3.0 för att ansluta till SQL Server 2005-installationer (9.x) och SQL Server 2008 (10.0.x). STÖD för SQLXML 3.0 ISAPI fungerar mot dessa senare versioner men stöder inte eller känner igen xml- datatyp eller UDT-typstöd som introducerades i SQL Server 2005 (9.x).
Säkerhetsändringar för xml-massinläsning för temporära filer
För SQLXML 4.0 och SQL Server beviljas behörigheter för XML-massinläsningsfiler till den användare som kör massinläsningsåtgärden. Läs- och skrivbehörigheter ärvs från filsystemet. I tidigare versioner av SQLXML och SQL Server skulle XML-massinläsning under SQLXML skapa temporära filer som inte var skyddade och som kan läsas av vem som helst.
Migrationsfrågor för Client-Side FOR XML
På grund av ändringar i körningsmotorn kan SQL Server returnera andra värden i metadata för en bastabell än vad som skulle returneras om FOR XML-frågan kördes under SQL Server 2000 (8.x). I de fall detta inträffar har formateringen på klientsidan av FOR XML-frågeresultaten olika utdata beroende på vilken version frågan körs mot.
Om en FOR XML-fråga körs klientside med hjälp av SQLXML 3.0 över en xml- datatypkolumn, kommer data i resultatet tillbaka som en fullt entiteterad sträng. I SQLXML 4.0 returneras data som XML om den interna SQL Server-klienten (SQLNCLI11) anges som provider.