XML

Ann725 2010-11-30 09:53:10
出于测试目的,所有 FOR XML 查询都应使用销售订单号 43659。
 需要两条不同的 FOR XML 查询以生成两种不同的 XML 格式。
 第一条FOR XML 查询应生成以属性为中心的 XML,如下面的示例所示:
<SalesOrder SalesOrderID="43659" OrderDate="2001-07-01T00:00:00" AccountNumber="10-4020-000676">
<Item ProductID="776" OrderQty="1" />
<Item ProductID="777" OrderQty="3" />
<Item ProductID="778" OrderQty="1" />
<Item ProductID="771" OrderQty="1" />
<! -- remaining items go here. -->
</SalesOrder>
 第二个 FOR XML 查询应生成以元素为中心和以属性为中心相混合的 XML,如下面的示例所示:
<OrdersList>
<Order>
<SalesOrderID>43659</SalesOrderID>
<OrderDate>2001-07-01T00:00:00</OrderDate>
<AccountNumber>10-4020-000676</AccountNumber>
<ProductID>776</ProductID>
<OrderQty>1</OrderQty>
</Order>
<Order>
<SalesOrderID>43659</SalesOrderID>
<OrderDate>2001-07-01T00:00:00</OrderDate>
<AccountNumber>10-4020-000676</AccountNumber>
<ProductID>777</ProductID>
<OrderQty>3</OrderQty>
</Order>
</OrdersList>
 在这些 FOR XML 查询中,SalesOrder 元素来自于 Sales.SalesOrder Header 表(SalesOrder是Sales.SalesOrder Header的别名),Item 属性和元素来自于 Sales.SalesOrderDetail 表。(Item是Sales.SalesOrderDetail的别名)
 需要一个 OPENXML 查询将 XML 文档(xml文档内容附下)碎分到相应的表中。查询将数据插入Sales.testTable1 表(Sales.testTable1表的创建语句附下),并且应使用以下架构声明:
列名 数据类型
CustomerID int
DueDate datetime
AccountNumber nvarchar(15)
ContactID int
BillToAddressID int
ShipToAddressID int
ShipMethodID int
SubTotal Money
TaxAmt money


附:
一、创建 SalesOrderHeader ---订单表,SalesOrderDetail
create table SalesOrderHeader
( SalesOrderID int,
OrderDate datetime,
AccountNumber nvarchar(15)
)
create table SalesOrderHeader
( ProductID int ,
OrderQty int,
SalesOrderID int

二、Sales.testTable1表创建语句:
create table Sales.testTable1
( CustomerID int,
DueDate datetime,
AccountNumber nvarchar(15),
ContactID int,
BillToAddressID int,
ShipToAddressID int,
ShipMethodID int,
SubTotal money,
TaxAmt money
)


三、xml文档内容:
'<?xml version="1.0" ?>
<SalesOrder CustomerID="18759" DueDate="2006-01-01T00:00:00" AccountNumber="10-4030-018759" ContactID="4189" BillToAddressID="14024" ShipToAddressID="14024" ShipMethodID="1" SubTotal="174.20" TaxAmt="10">
<Item>
<ProductID>714</ProductID>
<OrderQty>5</OrderQty>
<UnitPrice>28.84</UnitPrice>
</Item>
<Item>
<ProductID>715</ProductID>
<OrderQty>1</OrderQty>
<UnitPrice>30</UnitPrice>
</Item>
</SalesOrder>'
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ann725 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengyarongaa 的回复:]
精简一些  
[/Quote]
已经很精简了,下面 的是要用到的表跟XML文档
dawugui 2010-12-01
  • 打赏
  • 举报
回复
参考这里:
SQLServer2005 XML在T-SQL查询中的典型应用
http://topic.csdn.net/u/20081107/17/68aaf5a9-c596-4ab5-ae18-f3370b2ab35b.html
ycproc 2010-12-01
  • 打赏
  • 举报
回复
精简一些  
xman_78tom 2010-12-01
  • 打赏
  • 举报
回复

declare @x xml
set @x='
<SalesOrder CustomerID="18759" DueDate="2006-01-01T00:00:00" AccountNumber="10-4030-018759" ContactID="4189" BillToAddressID="14024" ShipToAddressID="14024" ShipMethodID="1" SubTotal="174.20" TaxAmt="10">
<Item>
<ProductID>714</ProductID>
<OrderQty>5</OrderQty>
<UnitPrice>28.84</UnitPrice>
</Item>
<Item>
<ProductID>715</ProductID>
<OrderQty>1</OrderQty>
<UnitPrice>30</UnitPrice>
</Item>
</SalesOrder>
';
select
t.c.value('./@CustomerID','int') CustomerID,
t.c.value('./@DueDate','datetime') DueDate,
t.c.value('./@AccountNumber','nvarchar(15)') AccountNumber,
t.c.value('./@ContactID','int') ContactID,
t.c.value('./@BillToAddressID','int') BillToAddressID,
t.c.value('./@ShipToAddressID','int') ShipToAddressID,
t.c.value('./@ShipMethodID','int') ShipMethodID,
t.c.value('./@SubTotal','money') SubTotal,
t.c.value('./@TaxAmt','money') TaxAmt
from @x.nodes('/SalesOrder') t(c);
xman_78tom 2010-12-01
  • 打赏
  • 举报
回复

select SalesOrderID [@SalesOrderID],OrderDate [@OrderDate],AccountNumber [@AccountNumber],
(select ProductID [@ProductID], OrderQty [@OrderQty] from SalesOrderDetail
where s.SalesOrderID=SalesOrderID for xml path('Item'),type)
from SalesOrderHeader s for xml path('SalesOrder'),type;

select soh.SalesOrderID, soh.OrderDate, soh.AccountNumber, sod.ProductID, sod.OrderQty
from SalesOrderHeader soh inner join SalesOrderDetail sod on soh.SalesOrderID=sod.SalesOrderID
for xml path('Order'),root('OrdersList');

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧