Microsoft SQLXML 4.0 SP1 包含不同的更新和增強功能。 本主題摘要說明更新並提供詳細資訊的連結 (如果有的話)。 SQLXML 4.0 SP1 提供額外的增強功能,以支援 SQL Server 2008 中引進的新數據類型。 本主題包含下列主題:
安裝 SQLXML 4.0 SP1
並存安裝問題
SQLXML 4.0 和 MSXML
重新分發 SQLXML 4.0
SQL Server Native Client 的支援
支援 SQL Server 2005 中引進的數據類型
SQLXML 4.0 的 XML 大量載入變更
SQLXML 4.0 的登錄機碼變更
移轉問題
安裝 SQLXML 4.0 SP1
在 SQL Server 2008 之前,SQLXML 4.0 是以 SQL Server 發行,而且是 SQL Server Express 以外的所有 SQL Server 版本預設安裝的一部分。 從 SQL Server 2008 開始,SQLXML (SQLXML 4.0 SP1) 的最新版本不再包含在 SQL Server 中。 若要安裝 SQLXML 4.0 SP1,請從 SQLXML 4.0 SP1 的安裝位置下載此元件。
SQLXML 4.0 SP1 檔案也會安裝於下列位置:
%PROGRAMFILES%\SQLXML 4.0\
備註
所有適當的 SQLXML 4.0 登錄設定都會在安裝程序時進行。
若要允許 32 位元 SQLXML 應用程式在 64 位元 Windows 作業系統上的 Windows on Windows (WOW64) 下執行,請執行 64 位元 SQLXML 4.0 SP1 封裝 (名稱為 sqlxml4.msi),您可以在下載中心取得該封裝。
解除安裝 SQLXML 4.0 SP1
共用登錄機碼存在於 SQLXML 3.0 SP3、SQLXML 4.0 及 SQLXML 4.0 SP1 之間。 如果在包含 SQLXML 3.0 SP3 的相同電腦上移除了較新版本的 SQLXML,您可能需要重新安裝 SQLXML 3.0 SP3。
並存安裝問題
SQLXML 4.0 的安裝程序不會移除舊版 SQLXML 所安裝的檔案。 因此,您的電腦上可能有數個不同版本之 SQLXML 安裝的 DLL。 您可以並行執行這些安裝。 SQLXML 4.0 會同時包含與版本無關和與版本相關的 PROGID。 所有生產環境中的應用程式都應該使用與版本相關的 PROGID。
SQLXML 4.0 SP1 和 MSXML
SQLXML 4.0 不會安裝 MSXML。 SQLXML 4.0 使用 MSXML 6.0,此 MSXML 6.0 會安裝為 SQL Server 2005 或更新版本的安裝。
重新分發 SQLXML 4.0 SP1
您可以使用可重新分發的安裝套件來分發 SQLXML 4.0 SP1。 使用 Chainer 和 Bootstrapper 技術是安裝多個封裝 (但對使用者卻好像是單一安裝) 的一種方法。 如需詳細資訊,請參閱<撰寫適用於 Visual Studio 2005 的自訂啟動載入器封裝>和<加入自訂的必要條件>。
如果應用程式的目標使用平台與當初開發時的平台不同,您可以從 Microsoft 下載中心下載 x64、Itanium 和 x86 版本的 sqlncli.msi。
MSXML 6.0 (msxml6.msi) 也有單獨的再發佈安裝程式。 您可以在下列位置的 SQL Server 安裝光碟片上找到這些程式:
%CD%\Setup\
這些安裝檔案可以用於直接從光碟片安裝 MSXML 6.0, 您也可以將 MSXML 6.0 和 SQLXML 4.0 SP1 自由地重新分發,並搭配您自訂的應用程式一起使用。
如果您要使用 SQL Server Native Client 當做應用程式的資料提供者,則也需要轉散發該程式。 如需詳細資訊,請參閱 安裝 SQL Server Native Client。
SQL Server Native Client 的支援
SQLXML 4.0 同時支援 SQLOLEDB 及 SQL Server Native Client 提供者。 建議您使用相同的 SQL Server Native Client 提供者和 SQL Server 版本,因為已開發 SQL Server Native Client 以支援伺服器中隨附的任何新數據類型,例如 Date, TimeSQL Server 2008 中的 、 DateTime2和 dateTimeOffset 數據類型,以及 SQL Server 2014 Native Client 支援。
SQL Server Native Client 是 SQL Server 2005 中引進的數據存取技術。 此項技術將 SQLOLEDB Provider 與 SQLODBC Driver 合而為一,成為原生的動態連結程式庫 (DLL),同時也提供了獨立而有別於 Microsoft Data Access Components (MDAC) 的新功能。
SQL Server Native Client 可用於建立新的應用程式,或增強需利用 SQL Server 所導入功能的現有應用程式 (該功能不受 MDAC 和 Microsoft Windows 中的 SQLOLEDB 和 SQLODBC 支援)。 例如,用戶端 SQLXML 功能需要 SQL Server Native Client,例如 FOR XML,才能使用 xml 數據類型。 如需詳細資訊,請參閱用戶端 XML 格式化 (SQLXML 4.0)、使用 ADO 執行 SQLXML 4.0 查詢,以及 SQL Server Native Client 程式設計。
備註
SQLXML 4.0 並非完全與 SQLXML 3.0 回溯相容。 因為某些錯誤修正和其他的功能性變更 (特別是 SQLXML ISAPI 支援的移除),您無法將 IIS 虛擬目錄用於 SQLXML 4.0。 雖然大部分的應用程式都可以在稍加修改後執行,但在將這些應用程式放入使用 SQLXML 4.0 的生產環境之前,必須先加以測試。
支援 SQL Server 2005 及 SQL Server 2008 中導入的資料類型
SQL Server 2005 引進 xml 數據類型,而 SQLXML 4.0 支援 xml 數據類型。 如需詳細資訊,請參閱<SQLXML 4.0 中的 xml 資料類型支援>。
如需在對應 XML 檢視、大量載入 XML 或執行 XML Updategram 時,如何在 SQLXML 中使用 xml 數據類型的範例,請參閱下列主題中提供的範例。
SQL Server 2008 引進 Date, Time、 DateTime2和 DateTimeOffset 數據類型。 SQLXML 4.0 SP1 會在 SQL Server 2014 原生用戶端 OLE DB 提供者(SQLNCLI11)搭配使用時,啟用這四個新數據類型作為內建純量類型,隨附於 SQL Server 2014 中。
SQLXML 4.0 SP1 的 XML 大量載入變更
針對 SQLXML 4.0,SchemaGen 溢位字段是使用 數據類型建立的
xml。 如需詳細資訊,請參閱<SQL Server XML 大量載入物件模型>。如果您先前已建立 Microsoft Visual Basic 應用程式,且想要使用 SQLXML 4.0,您必須使用 Xblkld4.dll 的參考來重新編譯應用程式。
對於 Visual Basic Scripting Edition 應用程式,則必須註冊您要使用的 DLL。 在下列範例中,如果您指定與版本無關的 PROGID,則應用程式會相依於最後註冊的 DLL:
set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")備註
與版本相關的 PROGID 是 SQLXMLBulkLoad.SQLXMLBulkLoad.4.0。
SQLXML 4.0 的登錄機碼變更
在 SQLXML 4.0 中,登錄機碼已從舊版變更為下列項目:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize
如果您想要這些機碼在 SQLXML 4.0 中生效,就必須變更設定。
此外,SQLXML 4.0 還導入了下列的登錄機碼:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo根據預設,SQLXML 4.0 會傳回由 OLE DB 和 SQL Server 提供的本機錯誤資訊,而不是像舊版 SQLXML 那樣的高層級 SQLXML 錯誤訊息。 如果您不要這項行為,則 DWORD 類型的這個登錄機碼值必須設定為 0 (值設值為 1)。
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces
根據預設,SQLXML 會傳回 SQL Server GUID 值,但沒有外面的大括號。 如果要以大括號傳回 GUID 值 (例如,{某個 GUID}),則此登錄機碼的值必須設定為 1 (預設值 0)。
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
根據預設,當 XML 剖析器載入資料時,空格會根據 XML 1.0 規則而正規化。 這會導致資料中的某些空白字元遺失。 因此,資料的文字表示法在剖析之後可能不會相同,雖然資料在語意上是相同的。
引入這個鍵是為了讓您可以選擇保留資料中的空白字元。 如果加入這個登錄機碼並將其值設定為 0,則 XML 中的空白字元 (LF、CR 和索引標籤) 會編碼傳回 (如果使用屬性值)。 如果使用元素值,則只有 CR 會編碼傳回。
例如:
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>
移轉問題
下列問題可能會影響舊版 SQLXML 應用程式到 SQLXML 4.0 的移轉。
ADO 和 SQLXML 4.0 查詢
在舊版的 SQLXML 中,支援使用 IIS 虛擬目錄和 SQLXML ISAPI 篩選來執行以 URL 為基礎的查詢。 對於使用 SQLXML 4.0 的應用程式,已不再提供這項支援。
反而可以利用在 Microsoft Data Access Components (MDAC) 2.6 和更新版本中初次導入的 ActiveX Data Objects (ADO) 的 SQL XML 延伸模組來執行 SQLXML 查詢、範本和 Updategram。
如需詳細資訊,請參閱使用 ADO 執行 SQLXML 4.0 查詢。
SQL Server 2005 所導入之 SQLXML 3.0 ISAPI 和資料類型的可支援性
由於 ISAPI 支援已從 SQLXML 4.0 中移除,如果您的解決方案需要 SQL Server 2005 中引進的增強型別功能,例如 xml 數據類型 或 使用者定義數據類型 (UDT) 和 Web 型存取,您必須使用另一個解決方案,例如 SQLXML Managed 類別 或其他類型的 HTTP 處理程式,例如 Native XML Web Services for SQL Server 2005。
或者,如果您不需要這些類型延伸模組,則可以繼續使用 SQLXML 3.0 連線到 SQL Server 2005 和 SQL Server 2008 安裝。 SQLXML 3.0 ISAPI 支援將針對這些更新版本運作,但不支持或辨識 xml SQL Server 2005 中引進的數據類型或 UDT 類型支援。
暫存檔案的 XML 大量載入安全性變更
對於 SQLXML 4.0 和 SQL Server,XML 大量載入檔案權限會授與給可執行大量載入作業的使用者。 讀取和寫入權限則是繼承自檔案系統。 在舊版的 SQLXML 和 SQL Server 中,在 SQLXML 下進行 XML 大量載入會建立暫存檔,這些暫存檔並未受到保護,可由任何人讀取。
用戶端 FOR XML 的移轉問題
由於執行引擎中的變更,SQL Server 可能會在基表的元數據中傳回不同的值,如果 FOR XML 查詢是在 SQL Server 2000 下執行,則傳回的值可能會不同。 發生這種情況時,FOR XML 查詢結果的用戶端格式設定會依照用來執行查詢的版本而有不同的輸出。
如果在數據類型數據行上使用 xml SQLXML 3.0 執行 FOR XML 查詢用戶端,則結果中的數據會以完整實體化字串的形式傳回。 在 SQLXML 4.0 中,如果將 SQL Server Native Client (SQLNCLI11) 指定為提供者,則會傳回 XML 資料。