社区
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
上面写法不对,大概是这个意思。大家给个思路
...全文
322
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()
基于MybatisPlus的
多表查询
本文详细介绍了基于MybatisPlus的
多表查询
方法,包括一对一、一对多及多对多查询的两种方式:非
select
配置与
select
配置,探讨了懒加载配置与MySQL函数使用技巧。
MyBatisPlus实现
多表查询
博客介绍了在MyBatisPlus中实现
多表查询
的几种方法,包括使用注解、MyBatis-Plus Join扩展、
XML
配置文件和动态查询,每种方法有适用场景。还说明了使用MyBatis-Plus Join扩展的步骤,如引入依赖、配置Mapper扫描等,可简洁实现多表关联查询。
Mybatis——
多表查询
本文详细介绍了如何在MyBatis框架下执行
多表查询
,包括一对一和一对多关系,通过实例演示了如何使用SQL
语句
、POJO映射、Mapper接口和
XML
配置来获取用户和订单及其详情的数据。
MybatisPlus多表连接查询
文章介绍了Mybatis-Plus-Join作为Mybatis-Plus的扩展,如何帮助开发者避免手动编写
XML
文件进行复杂的联表查询。通过添加依赖、创建实体和mapper,然后使用MPJLambdaWrapper进行联表、分页、一对多和一对一映射等查询,展示了该工具的便捷性。
JAVA mapper多表关联查询
本文详细介绍了如何在Java项目中使用MyBatis框架执行多表关联查询,包括创建数据表、Java实体类、定义Mapper接口和
XML
文件,以及执行查询的步骤和示例代码。
MS-SQL Server
34,876
社区成员
254,639
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章