社区
MS-SQL Server
帖子详情
在多个XML里用 select 语句多表查询,怎么做?
xiaokun111
2006-03-14 01:29:14
有多个XML文件,1个XML文件对应一个表。
例如执行:
select a.a1,b.b1,c.c1 from '1.xml' a ,'2.xml' b,'3.xml' c where a.id=b.id
上面写法不对,大概是这个意思。大家给个思路
...全文
288
6
打赏
收藏
在多个XML里用 select 语句多表查询,怎么做?
有多个XML文件,1个XML文件对应一个表。 例如执行: select a.a1,b.b1,c.c1 from '1.xml' a ,'2.xml' b,'3.xml' c where a.id=b.id 上面写法不对,大概是这个意思。大家给个思路
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenyu112
2006-03-16
打赏
举报
回复
学习
hglhyy
2006-03-15
打赏
举报
回复
示例
在检索数据时,用 rowpattern 标识 XML 文档中决定行的节点。rowpattern 用 MSXML XPath 实现中使用的 XPath 模式语言表示。例如,如果模式以元素或特性结束,则将为 rowpattern 选定的每个元素或特性节点创建一行。
flags 值提供默认映射。在 SchemaDeclaration 中如果没有指定 ColPattern,则使用 flags 参数所指定的映射。如果在 SchemaDeclaration 中指定了 ColPattern,则忽略 flags 值。指定的 ColPattern 确定映射(attribute-centric 或 element-centric),还确定在处理溢出/未用完数据时的行为。
A. 执行带 OPENXML 的简单 SELECT 语句
下例中的 XML 文档由 <Customer>、<Order> 和 <OrderDetail> 元素组成。OPENXML 语句从 XML 文档中检索两列行集(CustomerID 和 ContactName)中的客户信息。
首先调用 sp_xml_preparedocument 存储过程以获得文档句柄。此文档句柄传递到 OPENXML。
在 OPENXML 语句中:
rowpattern (/ROOT/Customer) 标识要处理的 <Customer> 节点。
flags 参数值设置为 1 表示 attribute-centric 映射。因此,XML 特性映射到在 SchemaDeclaration 中定义的行集中的列。
在 SchemaDeclaration 中(在 WITH 子句中),指定的 ColName 值与相应的 XML 特性名相匹配。因此,在 SchemaDeclaration 中不指定 ColPattern 参数。
最后 SELECT 语句检索 OPENXML 所提供的行集中的所有列。
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order OrderID="10248" CustomerID="VINET" EmployeeID="5"
OrderDate="1996-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order OrderID="10283" CustomerID="LILAS" EmployeeID="3"
OrderDate="1996-08-16T00:00:00">
<OrderDetail ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
EXEC sp_xml_removedocument @idoc
结果如下:
CustomerID ContactName
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez
如果在 flags 设置为 2 时(表示 element-centric 映射)执行上述 SELECT 语句,两个客户的 CustomerID 和 ContactName 值将作为 NULL 值返回,因为 <Customer> 元素没有任何子元素。
如果在 XML 文档中,<CustomerID> 和 <ContactName> 是子元素,则 element-centric 映射将检索值。
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer>
<CustomerID>VINET</CustomerID>
<ContactName>Paul Henriot</ContactName>
<Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer>
<CustomerID>LILAS</CustomerID>
<ContactName>Carlos Gonzlez</ContactName>
<Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',2)
WITH (CustomerID varchar(10),
ContactName varchar(20))
EXEC sp_xml_removedocument @idoc
结果如下:
CustomerID ContactName
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez
xiaokun111
2006-03-15
打赏
举报
回复
没人回答请版主为我结贴。
xiaokun111
2006-03-15
打赏
举报
回复
谢谢 hglhyy(為人民币服务!) ,好复杂,看的不太明白。
我有这样格式的xml文件若干,在不访问数据库的情况下
在本地将数据按照
select a.a1,b.b1,c.c1 from '1.xml' a ,'2.xml' b,'3.xml' c where a.id=b.id
这样的格式查询应该怎么写?
<?xml version="1.0" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA><FIELDS>
<FIELD attrname="ID" fieldtype="i4" readonly="true" SUBTYPE="Autoinc"/>
<FIELD attrname="aaa" fieldtype="string" WIDTH="50"/>
<FIELD attrname="bbb" fieldtype="string" WIDTH="50"/>
<FIELD attrname="ccc" fieldtype="string" WIDTH="50"/>
<FIELD attrname="ddd" fieldtype="string" WIDTH="50"/>
</FIELDS><PARAMS/>
</METADATA><ROWDATA>
<ROW ID="1" aaa="1111" bbb="2222" ccc="3333" ddd="4444"/>
<ROW ID="2" aaa="1111" bbb="abc" ccc="sdf" ddd="ggg"/>
<ROW ID="3" aaa="1111" bbb="yyy" ccc="uuu" ddd="ppp"/>
<ROW ID="4" aaa="1111" bbb="sdww" ccc="hhh" ddd="llk"/>
<ROW ID="5" aaa="1111" bbb="gfgf" ccc="nnn" ddd="vvv"/>
<ROW ID="6" aaa="2222" bbb="qwe" ccc="rrr" ddd="g"/>
<ROW ID="7" aaa="2222" bbb="ere" ccc="dd" ddd="HHH"/>
<ROW ID="8" aaa="3333" bbb="4444" ccc="5555" ddd="6666"/>
<ROW ID="9" aaa="3333" bbb="3333" ccc="eree" ddd="rrrr"/>
</ROWDATA></DATAPACKET>
ReViSion
2006-03-14
打赏
举报
回复
哈哈,OpenXML,我也没看明白
子陌红尘
2006-03-14
打赏
举报
回复
查联机帮助:OPENXML()
XML
(报文)基础实战精讲(大神必经之路)
什么是
XML
?
XML
指可扩展标记语言(EXtensible Markup Language)。
XML
是一种很像HTML的标记语言。
XML
的设计宗旨是传输数据,而不是显示数据。
XML
标签没有被预定义。您需要自行定义标签。
XML
被设计为具有...
关于ssm框架,mybatis
里
同时使用多个
select
语句
并获得多个返回值的方法
里
是可以放两个
select
语句
的。 正常形式是这样的: <
select
id="c" resultType="java.util.Map">
select
a from table; </
select
> 如果想要同时执行两个
select
语句
就会是这样的形式: <
select
...
mybatis如何写多
表
联查
其中,@
Select
注解描述了 SQL
语句
,@Results 注解使用 @Result 描述了多个
查询
结果的映射规则。需要注意的是,这种方式需要将
查询
结果映射到 Java 对象中,因此需要定义 Java 对象来存储
查询
结果。在
语句
中描述多...
使用
xml
生成
查询
用sql
语句
由于项目的需要,要编写大量的sql
查询
,而项目成员编写的格式有很多的不同,于是想到利用
XML
统一
做
方面的工作(具体如何转换,大家可以根据项目编程的语言来实现)。具体如下:[connection]=AND(default)|OR[bool_...
SQL
语句
联
表
查询
返回多
表
字段,
XML
文件中返回类型如何定义的经验分享?
方法一、可以重新创建类似于实体类的VO,其包括联
表
所需返回所有的字段,这样
XML
文件中该SQL
语句
的resultType="绝对路径或者相对路径的VO" 。 方法二(我今天需要介绍)、重新创建实体类VO可能比较麻烦,可以把该SQL...
MS-SQL Server
34,593
社区成员
254,590
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章