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(WOW64)下运行,请运行名为 sqlxml4.msi的 64 位 SQLXML 4.0 SP1 包,可在下载中心找到该包。
卸载 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。 所有生产应用程序都应使用依赖于版本的 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 上找到这些内容:
%CD%\Setup\
这些安装文件可用于直接从 CD 安装 MSXML 6.0。 它们还可用于使用自己的自定义应用程序自由重新分发 MSXML 6.0 以及 SQLXML 4.0 SP1。
如果将 SQL Server Native Client 用作应用程序的数据提供程序,则还需要重新分发 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, TimeDateTime2SQL Server 2008 中的数据类型和 dateTimeOffset SQL Server 2014 Native Client 支持的数据类型。
SQL Server Native Client 是 SQL Server 2005 中引入的数据访问技术。 它将 SQLOLEDB 提供程序和 SQLODBC 驱动程序合并为一个本机动态链接库(DLL),同时提供独立于Microsoft数据访问组件(MDAC)的新功能。
SQL Server Native Client 可用于创建新应用程序或增强现有应用程序,这些应用程序需要利用 SQL Server 中引入的功能,而 SQLOLEDB 和 SQLODBC 在 MDAC 和 Microsoft Windows 中不受支持。 例如,客户端 SQLXML 功能(如 FOR XML)需要使用 SQL Server Native Client 才能使用 xml 数据类型。 有关详细信息,请参阅客户端 XML 格式(SQLXML 4.0),使用 ADO 执行 SQLXML 4.0 查询和 SQL Server 本机客户端编程。
注释
SQLXML 4.0 与 SQLXML 3.0 不完全向后兼容。 由于某些 bug 修复和其他功能更改(特别是删除 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 更新报时使用 xml SQLXML 中的数据类型的示例,请参阅以下主题中提供的示例。
SQL Server 2008 引入了 Date, TimeDateTime2DateTimeOffset 数据类型和 DateTimeOffset 数据类型。 SQLXML 4.0 SP1 将在 SQL Server 2014 本机客户端 OLE DB 提供程序(SQLNCLI11)一起使用时启用这四个新数据类型作为内置标量类型。SQL Server 2014 中随附。
SQLXML 4.0 SP1 的 XML 大容量加载更改
对于 SQLXML 4.0,使用数据类型创建
xmlSchemaGen 溢出字段。 有关详细信息,请参阅 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 值。 如果想要使用大括号(例如 {some GUID})返回的 GUID 值,则必须将此注册表项的值设置为 1(默认值为 0)。
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
默认情况下,当 XML 分析器加载数据时,会根据 XML 1.0 规则规范化空格。 这会导致数据中的一些空格字符丢失。 因此,分析后,数据的文本表示形式可能不相同,尽管从语义上讲,数据是相同的。
引入了此密钥,以便你可以选择在数据中保留空格字符。 如果添加此注册表项并将其值设置为 0,则 XML 中的空格字符(LF、CR 和 Tab)在属性值的情况下将返回编码。 对于元素值,仅返回 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 的应用程序,此支持不再可用。
相反,可以使用 SQLXML 扩展来执行 SQLXML 查询、模板和更新报,这些扩展首先在 Microsoft 数据访问组件 (MDAC) 2.6 及更高版本中引入的 ActiveX 数据对象(ADO)。
有关详细信息,请参阅使用 ADO 执行 SQLXML 4.0 查询。
SQL Server 2005 中引入的 SQLXML 3.0 ISAPI 和数据类型的支持性
由于 ISAPI 支持已从 SQLXML 4.0 中删除,因此,如果解决方案需要 SQL Server 2005 中引入的增强型数据键入功能,例如 XML 数据类型 或 用户定义的数据类型(UDT) 和基于 Web 的访问,则需要使用其他解决方案,例如 SQLXML 托管类 或其他类型的 HTTP 处理程序,例如本机 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 大容量加载将创建不受保护且可由任何人读取的临时文件。
Client-Side FOR XML 的迁移问题
由于执行引擎的更改,SQL Server 可能会返回基表元数据中的值,如果 FOR XML 查询在 SQL Server 2000 下执行,则返回的值可能不同于返回的值。 如果发生这种情况,FOR XML 查询结果的客户端格式将具有不同的输出,具体取决于要对其运行查询的版本。
如果对数据类型列使用 SQLXML 3.0 xml 在客户端执行 FOR XML 查询,则结果中的数据将作为完全实体化的字符串返回。 在 SQLXML 4.0 中,如果将 SQL Server Native Client (SQLNCLI11) 指定为提供程序,则数据将作为 XML 返回。