之前我们介绍过:SQL Server数据库中FOR XML AUTO的使用详解,本文我们介绍一些稍微复杂的应用,首先我们先看下面的代码:

成都创新互联公司是一家专注于成都网站建设、网站建设与策划设计,确山网站建设哪家好?成都创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:确山等地区。确山做网站价格咨询:18982081108
- CREATE TABLE Person(
 - ID INT IDENTITY(1,1) NOT NULL,
 - Name NVARCHAR(20) NOT NULL DEFAULT(''),
 - Age INT DEFAULT(0) NOT NULL,
 - Sex BIT DEFAULT(0) NOT NULL
 - )
 - --DROP TABLE [Order]
 - CREATE TABLE [Order](
 - ID INT IDENTITY(1,1) PRIMARY KEY,
 - PersonID INT DEFAULT(0) NOT NULL,
 - TotalPrice DECIMAL DEFAULT(0) NOT NULL
 - )
 - CREATE TABLE Product(
 - ID INT IDENTITY(1,1) PRIMARY KEY,
 - Price DECIMAL(8,2) DEFAULT(0.00) NOT NULL,
 - Img NVARCHAR(50) DEFAULT('') NOT NULL
 - )
 - CREATE TABLE OrderDetail(
 - ID INT IDENTITY(1,1) PRIMARY KEY,
 - OrderID INT DEFAULT(0) NOT NULL,
 - ProductID INT DEFAULT(0) NOT NULL,
 - Price DECIMAL(8,2) DEFAULT(0.00) NOT NULL
 - )
 - INSERT INTO Person(Name,Age,Sex)
 - SELECT '张三',28,1 UNION ALL
 - SELECT '李四',28,1 UNION ALL
 - SELECT '王五',28,1
 - INSERT INTO [Order](PersonID,TotalPrice)
 - SELECT 1,100.0 UNION ALL
 - SELECT 1,111.0 UNION ALL
 - SELECT 2,112.0 UNION ALL
 - SELECT 3,98.0 UNION ALL
 - SELECT 3,150.49 UNION ALL
 - SELECT 3,58
 - INSERT INTO Product(Price,Img)
 - SELECT 101.0,'1.png' UNION ALL
 - SELECT 102.0,'2.png' UNION ALL
 - SELECT 103.0,'3.png' UNION ALL
 - SELECT 104.0,'4.png' UNION ALL
 - SELECT 105.0,'5.png'
 - INSERT INTO OrderDetail(OrderID,ProductID,Price)
 - SELECT TOP 3 3,ID,Price FROM Product
 - SELECT * FROM Person
 - SELECT * FROM [Order]
 - SELECT * FROM Product
 - SELECT * FROM OrderDetail
 - Person
 - ID Name Age Sex
 - ----------- -------------------- ----------- -----
 - 1 张三 28 1
 - 2 李四 28 1
 - 3 王五 28 1
 - (3 行受影响)
 - [Order]
 - ID PersonID TotalPrice
 - ----------- ----------- ---------------------------------------
 - 1 1 100
 - 2 1 111
 - 3 2 112
 - 4 3 98
 - 5 3 150
 - 6 3 58
 - (6 行受影响)
 - Product
 - ID Price Img
 - ----------- --------------------------------------- --------------------------------------------------
 - 1 101.00 1.png
 - 2 102.00 2.png
 - 3 103.00 3.png
 - 4 104.00 4.png
 - 5 105.00 5.png
 - (5 行受影响)
 - OrderDetail
 - ID OrderID ProductID Price
 - ----------- ----------- ----------- ---------------------------------------
 - 1 1 1 101.00
 - 2 1 2 102.00
 - 3 1 3 103.00
 - 4 1 4 104.00
 - 5 1 5 105.00
 - 6 2 1 101.00
 - 7 2 2 102.00
 - 8 2 3 103.00
 - 9 3 1 101.00
 - 10 3 2 102.00
 - 11 3 3 103.00
 - (11 行受影响)
 
理下其中的关系:
会员表Person与订单表Order为一对多关系,其中Order.PersonID = Person.ID
订单表与订单详情表为一对多关系,其中OrderDetail.OrderID = Order.ID
产品表与订单详情表为一对多关系,其中OrderDetail.ProductID = Product.ID
如下图1
图1
可以开始了:
先来看有那些订单,分别为谁的订单,以及订单详情,SQL脚本及查询结果如下:
- 1: SELECT
 - 2: [Order].ID,
 - 3: [Order].PersonID,
 - 4: OrderDetail.OrderID,
 - 5: OrderDetail.ProductID,
 - 6: OrderDetail.Price
 - 7: FROM [Order]
 - 8: INNER JOIN OrderDetail ON [Order].ID = OrderDetail.OrderID
 - 9: FOR XML AUTO,ROOT('Record')
 
查询结果如下:
- 1:
 - 2:
 - 3:
 - 4:
 - 5:
 - 6:
 - 7:
 - 8:
 - 9:
 - 10:
 - 11:
 - 12:
 - 13:
 - 14:
 - 15:
 - 16:
 - 17:
 - 18:
 - 19:
 
调整下查询列的顺序,再看下结果,变了啊:
- SELECT
 - OrderDetail.OrderID,
 - OrderDetail.ProductID,
 - OrderDetail.Price,
 - [Order].ID,
 - [Order].PersonID
 - FROM [Order]
 - INNER JOIN OrderDetail ON [Order].ID = OrderDetail.OrderID
 - FOR XML AUTO,ROOT('Record')
 
输出结果很猛:
XML结构变了,是变了,MSDN中是这样解释滴:
***个ID引用自Order表,故创建Order节点,PersonID同样引用自Order表,***步已经创建Order节点,故此处仅为节点添加PersonID属性。
接下来三列OrderID,ProductID,Price引用OrderDetail表,因此在Order节点下创建OrderDetail子节点 列的别名显示为属性名称,没有别名使用列名,节点的名称使用表别名,没有别名使用表名。
Order By对XML结构的影响
再看个例子,对Order.PersonID排序:
- SELECT
 - [Order].ID,
 - [Order].PersonID,
 - OrderDetail.OrderID,
 - OrderDetail.ProductID,
 - OrderDetail.Price
 - FROM [Order]
 - INNER JOIN OrderDetail ON [Order].ID = OrderDetail.OrderID
 - ORDER BY [Order].PersonId
 - FOR XML AUTO,ROOT('Record')
 
输出结果:
其实这个结果与***个查询结果是一样滴,行默认顺序会影响XML结果,排序也会影响XML结构,只要当前行与上一行数据可以合并时,就会影响XML结构,再来看一个排序影响XML结构的例子,这次以OrderDetail.ProductID排序,直接看结果:
以上就是FOR XML AUTO的应用的相关知识,本文我们就介绍到这里了,希望本次的介绍能够对您有所收获!
                网页标题:SQLServer数据库中FORXMLAUTO的使用详解续
                
                网站路径:http://www.csdahua.cn/qtweb/news29/523829.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网