SQL Server 2000 中的XML 支持
• 服务器端支持:
在服务器上,XML 数据可以从表生成,并通过
在SELECT 语句中使用FOR XML 子句来查询
结果。FOR XML 的逆函数是一个名
为OpenXML 的关系行集合生成器函数;它通过
求XPath 1.0 表达式的值来从XML 数据提取
值,并将其放到行集合的列中。
• 客户端支持:
SQL Server 2000 对客户端编程的支持称
为SQLXML。这项技术的核心是XML 视图,它
是XML 架构和关系表之间的双向映射。XML 视
图允许使用XPath 1.0 的一个子集来进行查询,
其中,可以使用映射将路径表达式转换成底层表
中的SQL 查询,并且将查询结果打包成XML 结
果。
FOR XML
• SQL Server和XML之间的集成首要一点就
是根据SQL数据创建XML文件。XML文件
的构造并不复杂,用简单的脚本和ADO记
录集就可以轻松产生。这个任务虽然不算
麻烦,但开发人员却需要针对他们从服务
器获取的结果集合产生不同的脚本,或者
编写更为复杂的通用脚本。SELECT 语句
则由此而配备了新的FOR XML子句。
FOR XML
• FOR XML—SQL SELECT语句的FOR XML子句。
该语句允许一个行集作为XML文档返回。
• 每个FORXML查询的结果都返回包含单行单列的
行集,存储在该该单行/列中的值是XML文档。在
查询器中其列名为一个GUID前加一个前缀“XML_”
组成。
• 由FOR XML子句产生的XML文档,在所产生的文
档层次、每列转换的数据、二进制数据表示、所
产生的XML schema以及和其他XML的细小差别
等方面,可以高度自定义。
FOR XML语法
• 该子句的语法如下所示:
[ FOR { XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY BASE64 ] } ]
FOR XML模式
FORXML从最简单到最复杂共有RAW、AUTO和EXPLICIT
三种模式。这三种模式产生的SQL如下:
• RAW——产生一个两维的XML网格,其中,行值(查询返
回的)部包含在称为行(row)的元素里。查询所返回的每
一个列值都由一个有一对行标记属性表示
• AUTO—产生一个潜在的层次化XML文档,该文档中每—
个列值(由查询返回) 都包含在一个元素或属性中
• EXPLICIT——在这种模式下我们可以指定用于包含由
FOR XML EXPLICIT查询返回的列值的精确表单。列值
可以作为属性或元素返回。该特征可基于各列指定。表
示每一列的数据类型是可以具体指定的,正如我们可以指
定为由查询产生的精确XML层次文档.
FOR XML EXPLICIT
• FOR EXPLICIT查询是FORXML查询中最
复朵、最个性化的一种。使用该查询可以
为每个“表例”对指定XML数据层次结构中的
具体位置。
• FOR XML EXPLICIT查询利用per-column
指令控制所产生数据的格式。该指令指定
“表/列”对是否表示为XML元素或属性。这
就意味着:数据表中的某列可能产生一个
XML元素,而另一列则可能产生一个属性。
FOR XML EXPLICIT
• 下面的FOR XML EXPLICIT查询SELECT语句掩饰
了Northwind的Region数据表的RegionID列是怎样在
同一个XML文档中既被指定为属性又被指定为元素
的:
SELECT 1 AS Tag,
0 AS Parent,
RegionID AS [Region!1!RegionIDAsAttrbute],
RegionID AS
[Region!1!RegionIDAsElement!element]
FROM Region
FOR XML EXPLICIT
三种模式优缺点
• 指定RAW模式时,查询结果集中每一个记录包含
唯一的元素<row>。由于我们无法控制元素名字
和文档结构,因此这种模式不是很有用。
• 指定AUTO模式时,虽然可以得到层次结构,但
这种层次结构是线性的,即每个父节点只能有一
个子节点,反之亦然;通过别名指定元素名字不
太方便,而且有时候会影响查询命令本身的可读
性;无法在文档中同时生成元素和属性。要么全
部是元素(通过ELEMENTS关键词指定),要么
全部是属性(默认)。
• EXPLICIT模式比较复杂,我们将用另外一种方法
来表达图1所显示的查询。这种方法使得我们能够
完全地控制查询所生成的XML文档。
FOR XML EXPLICIT语法
columnName
AS[ContainedElementName!Tag!AttributeOrEle
mentName!Directive]
• ContainedElementName:包含一个列的的元素名
称
• Tag:和各列相关的标签值
• AttributeOrElementName:含有列数据的元素或
者属性的名字
• Directive:用来指定数据应采取的格式(hide、
element、xml、xmltext、CDATA)。
FOR XML EXPLICIT示例
• --商店数据
SELECT 1 as Tag,
NULL as Parent,
s.stor_id as [store!1!Id],
s.stor_name as [store!1!Name],
NULL as[sale!2!OrderNo],
NULL as [sale!2!Qty]
FROM stores s
UNION ALL
-- 销售数据
SELECT 2, 1,
s.stor_id,
s.stor_name,
sa.ord_num,
sa.qty
FROM stores s, sales sa
WHERE s.stor_id = sa.stor_id
ORDER BY [store!1!name]
FOR XML EXPLICIT
FOR XML参数
• ELEMENTS——只能应用于FOR XML AUTO查
询,它指示为每列所返回的列值在XML文档中
以—个元素表示,而不是作为一个属性(默认)。
• BINARY BASE64-该选项使XML文档中的二进
制数据被表示为BINARY BASE64编码。这种二
进制数据一般都存在于BINARY、VARBINARY或
IMAGE类型的列中。
• XMLDATA:该选项为FORXML查询产生的XML文
档产生一个XML数据模式。该模式是XML文档的
预定义格式。
OPEN XML
• OPENXML函数可以让你像操作一个表那样
来运用XML数据,可以将它们转换成内存
中的一个rowset。
• 打开这个行集后可以各种SQL语句进行操
作。
OPEN XML语法
• OPENXML(idoc int[in],rowpattern
nvarchar[in],[flags byte[in]]) [WITH
(SchemaDeclaration|TableName)]
• Idoc:int类型的输入参数,引用XML文档句柄,是
利用sp_xml_preparedocument创建的
• Rowpattern:navarchar类型的输入参数,
XPATH模式,指定将XML文档的节点处理成行集。
例如:N’/TOP/Region表明Region节点为要解释的
XML文档的级别。
• Flags:byte类型的输入参数,指示了如何将XML
节点的类型解释诶行集的列。0和1表明使用属性
表示列,2表明使用元素表示列等。
With子句
• WITH SchemaDeclaration:允许指定一个
模式
• WITH TableName:将与特定数据表相关
的模式应用于所指定的XML文档。常用选
项。
OPENXML使用步骤
• 首先要调用sp_xml_preparedocument存储
过程,为其传递一个XML文档作为输入参
数。该存储过程返回一个用于XML文档内
部显示的句柄。
• 调用OPENXML以分割XML文档,并创建一
个行集。执行各种操作。
• 在处理完XML数据后,我们可以调用
sp_xml_removedocument将XML数据从内
存中删除。
SQLXML
XML for SQL Server,又名SQLXML,可帮助
开发人员在扩展标记语言(XML)和相关数据
之间架设起沟通的桥梁。由于发布SQL
Server 2000时还没有Web Services,另外
SQL Server 2000中内建的对XML的支持并非
都遵循最新的W3C标准,所以SQLXML更象
是一个补丁.
访问SQLXML
在SQL Server 2000 中,有两种访问SQLXML 功
能的主要方法:
• HTTP访问:
SQL Server 2000 中的SQLXML 功能也可以使
用SQLXML ISAPI 过滤器通过HTTP 进行访问。
通过使用我们的配置工具,您可以建立网站来检
索传入请求,从而通过HTTP 执行XML 模板、
XML 视图之上的FOR XML 和XPath 1.0 语句。
• SQLXMLOLEDB Provider:
SQLXMLOLEDB Provider 是一个OLE DB 提供
程序,它通过ADO 公开Microsoft SQLXML 功
能。
使用HTTP访问
SQL Server的多种方式
• 首先要使用IIS Virtual Directory
Management 建立Virtual Directory 和
Virtual Name 并且进行配置。
• 访问举例:
http://localhost/Northwind?sql=select+*+F
ROM+Employees+FOR+XML+AUTO&root
=root
使用SQLXML
Managed Classes
• SqlXml数据提供程序没有实现Connection
类,只实现了Command、Parameter以及
Adapter类
• SqlXml在Command对象上揭示了所有功
能,从而允许使用流式输入、使用XPath查
询、为XPath指定XML映射架构、添加XML
根元素以及通过XSL样式表进行后期处理。
所有这些功能都在其属性中得以设置
/Files/cmzzlh/asp.net/SQLServerAndXML.rar
/Files/cmzzlh/asp.net/SQL.rar
• 服务器端支持:
在服务器上,XML 数据可以从表生成,并通过
在SELECT 语句中使用FOR XML 子句来查询
结果。FOR XML 的逆函数是一个名
为OpenXML 的关系行集合生成器函数;它通过
求XPath 1.0 表达式的值来从XML 数据提取
值,并将其放到行集合的列中。
• 客户端支持:
SQL Server 2000 对客户端编程的支持称
为SQLXML。这项技术的核心是XML 视图,它
是XML 架构和关系表之间的双向映射。XML 视
图允许使用XPath 1.0 的一个子集来进行查询,
其中,可以使用映射将路径表达式转换成底层表
中的SQL 查询,并且将查询结果打包成XML 结
果。
FOR XML
• SQL Server和XML之间的集成首要一点就
是根据SQL数据创建XML文件。XML文件
的构造并不复杂,用简单的脚本和ADO记
录集就可以轻松产生。这个任务虽然不算
麻烦,但开发人员却需要针对他们从服务
器获取的结果集合产生不同的脚本,或者
编写更为复杂的通用脚本。SELECT 语句
则由此而配备了新的FOR XML子句。
FOR XML
• FOR XML—SQL SELECT语句的FOR XML子句。
该语句允许一个行集作为XML文档返回。
• 每个FORXML查询的结果都返回包含单行单列的
行集,存储在该该单行/列中的值是XML文档。在
查询器中其列名为一个GUID前加一个前缀“XML_”
组成。
• 由FOR XML子句产生的XML文档,在所产生的文
档层次、每列转换的数据、二进制数据表示、所
产生的XML schema以及和其他XML的细小差别
等方面,可以高度自定义。
FOR XML语法
• 该子句的语法如下所示:
[ FOR { XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY BASE64 ] } ]
FOR XML模式
FORXML从最简单到最复杂共有RAW、AUTO和EXPLICIT
三种模式。这三种模式产生的SQL如下:
• RAW——产生一个两维的XML网格,其中,行值(查询返
回的)部包含在称为行(row)的元素里。查询所返回的每
一个列值都由一个有一对行标记属性表示
• AUTO—产生一个潜在的层次化XML文档,该文档中每—
个列值(由查询返回) 都包含在一个元素或属性中
• EXPLICIT——在这种模式下我们可以指定用于包含由
FOR XML EXPLICIT查询返回的列值的精确表单。列值
可以作为属性或元素返回。该特征可基于各列指定。表
示每一列的数据类型是可以具体指定的,正如我们可以指
定为由查询产生的精确XML层次文档.
FOR XML EXPLICIT
• FOR EXPLICIT查询是FORXML查询中最
复朵、最个性化的一种。使用该查询可以
为每个“表例”对指定XML数据层次结构中的
具体位置。
• FOR XML EXPLICIT查询利用per-column
指令控制所产生数据的格式。该指令指定
“表/列”对是否表示为XML元素或属性。这
就意味着:数据表中的某列可能产生一个
XML元素,而另一列则可能产生一个属性。
FOR XML EXPLICIT
• 下面的FOR XML EXPLICIT查询SELECT语句掩饰
了Northwind的Region数据表的RegionID列是怎样在
同一个XML文档中既被指定为属性又被指定为元素
的:
SELECT 1 AS Tag,
0 AS Parent,
RegionID AS [Region!1!RegionIDAsAttrbute],
RegionID AS
[Region!1!RegionIDAsElement!element]
FROM Region
FOR XML EXPLICIT
三种模式优缺点
• 指定RAW模式时,查询结果集中每一个记录包含
唯一的元素<row>。由于我们无法控制元素名字
和文档结构,因此这种模式不是很有用。
• 指定AUTO模式时,虽然可以得到层次结构,但
这种层次结构是线性的,即每个父节点只能有一
个子节点,反之亦然;通过别名指定元素名字不
太方便,而且有时候会影响查询命令本身的可读
性;无法在文档中同时生成元素和属性。要么全
部是元素(通过ELEMENTS关键词指定),要么
全部是属性(默认)。
• EXPLICIT模式比较复杂,我们将用另外一种方法
来表达图1所显示的查询。这种方法使得我们能够
完全地控制查询所生成的XML文档。
FOR XML EXPLICIT语法
columnName
AS[ContainedElementName!Tag!AttributeOrEle
mentName!Directive]
• ContainedElementName:包含一个列的的元素名
称
• Tag:和各列相关的标签值
• AttributeOrElementName:含有列数据的元素或
者属性的名字
• Directive:用来指定数据应采取的格式(hide、
element、xml、xmltext、CDATA)。
FOR XML EXPLICIT示例
• --商店数据
SELECT 1 as Tag,
NULL as Parent,
s.stor_id as [store!1!Id],
s.stor_name as [store!1!Name],
NULL as[sale!2!OrderNo],
NULL as [sale!2!Qty]
FROM stores s
UNION ALL
-- 销售数据
SELECT 2, 1,
s.stor_id,
s.stor_name,
sa.ord_num,
sa.qty
FROM stores s, sales sa
WHERE s.stor_id = sa.stor_id
ORDER BY [store!1!name]
FOR XML EXPLICIT
FOR XML参数
• ELEMENTS——只能应用于FOR XML AUTO查
询,它指示为每列所返回的列值在XML文档中
以—个元素表示,而不是作为一个属性(默认)。
• BINARY BASE64-该选项使XML文档中的二进
制数据被表示为BINARY BASE64编码。这种二
进制数据一般都存在于BINARY、VARBINARY或
IMAGE类型的列中。
• XMLDATA:该选项为FORXML查询产生的XML文
档产生一个XML数据模式。该模式是XML文档的
预定义格式。
OPEN XML
• OPENXML函数可以让你像操作一个表那样
来运用XML数据,可以将它们转换成内存
中的一个rowset。
• 打开这个行集后可以各种SQL语句进行操
作。
OPEN XML语法
• OPENXML(idoc int[in],rowpattern
nvarchar[in],[flags byte[in]]) [WITH
(SchemaDeclaration|TableName)]
• Idoc:int类型的输入参数,引用XML文档句柄,是
利用sp_xml_preparedocument创建的
• Rowpattern:navarchar类型的输入参数,
XPATH模式,指定将XML文档的节点处理成行集。
例如:N’/TOP/Region表明Region节点为要解释的
XML文档的级别。
• Flags:byte类型的输入参数,指示了如何将XML
节点的类型解释诶行集的列。0和1表明使用属性
表示列,2表明使用元素表示列等。
With子句
• WITH SchemaDeclaration:允许指定一个
模式
• WITH TableName:将与特定数据表相关
的模式应用于所指定的XML文档。常用选
项。
OPENXML使用步骤
• 首先要调用sp_xml_preparedocument存储
过程,为其传递一个XML文档作为输入参
数。该存储过程返回一个用于XML文档内
部显示的句柄。
• 调用OPENXML以分割XML文档,并创建一
个行集。执行各种操作。
• 在处理完XML数据后,我们可以调用
sp_xml_removedocument将XML数据从内
存中删除。
SQLXML
XML for SQL Server,又名SQLXML,可帮助
开发人员在扩展标记语言(XML)和相关数据
之间架设起沟通的桥梁。由于发布SQL
Server 2000时还没有Web Services,另外
SQL Server 2000中内建的对XML的支持并非
都遵循最新的W3C标准,所以SQLXML更象
是一个补丁.
访问SQLXML
在SQL Server 2000 中,有两种访问SQLXML 功
能的主要方法:
• HTTP访问:
SQL Server 2000 中的SQLXML 功能也可以使
用SQLXML ISAPI 过滤器通过HTTP 进行访问。
通过使用我们的配置工具,您可以建立网站来检
索传入请求,从而通过HTTP 执行XML 模板、
XML 视图之上的FOR XML 和XPath 1.0 语句。
• SQLXMLOLEDB Provider:
SQLXMLOLEDB Provider 是一个OLE DB 提供
程序,它通过ADO 公开Microsoft SQLXML 功
能。
使用HTTP访问
SQL Server的多种方式
• 首先要使用IIS Virtual Directory
Management 建立Virtual Directory 和
Virtual Name 并且进行配置。
• 访问举例:
http://localhost/Northwind?sql=select+*+F
ROM+Employees+FOR+XML+AUTO&root
=root
使用SQLXML
Managed Classes
• SqlXml数据提供程序没有实现Connection
类,只实现了Command、Parameter以及
Adapter类
• SqlXml在Command对象上揭示了所有功
能,从而允许使用流式输入、使用XPath查
询、为XPath指定XML映射架构、添加XML
根元素以及通过XSL样式表进行后期处理。
所有这些功能都在其属性中得以设置
/Files/cmzzlh/asp.net/SQLServerAndXML.rar
/Files/cmzzlh/asp.net/SQL.rar
浙公网安备 33010602011771号