新聞中心
之前我們介紹過:SQL Server數(shù)據(jù)庫中FOR XML AUTO的使用詳解,本文我們介紹一些稍微復(fù)雜的應(yīng)用,首先我們先看下面的代碼:

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)與策劃設(shè)計,確山網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:確山等地區(qū)。確山做網(wǎng)站價格咨詢: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 行受影響)
理下其中的關(guān)系:
會員表Person與訂單表Order為一對多關(guān)系,其中Order.PersonID = Person.ID
訂單表與訂單詳情表為一對多關(guān)系,其中OrderDetail.OrderID = Order.ID
產(chǎn)品表與訂單詳情表為一對多關(guān)系,其中OrderDetail.ProductID = Product.ID
如下圖1
圖1
可以開始了:
先來看有那些訂單,分別為誰的訂單,以及訂單詳情,SQL腳本及查詢結(jié)果如下:
- 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')
查詢結(jié)果如下:
- 1:
- 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
- 9:
- 10:
- 11:
- 12:
- 13:
- 14:
- 15:
- 16:
- 17:
- 18:
- 19:
調(diào)整下查詢列的順序,再看下結(jié)果,變了?。?/p>
- 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')
輸出結(jié)果很猛:
XML結(jié)構(gòu)變了,是變了,MSDN中是這樣解釋滴:
***個ID引用自O(shè)rder表,故創(chuàng)建Order節(jié)點,PersonID同樣引用自O(shè)rder表,***步已經(jīng)創(chuàng)建Order節(jié)點,故此處僅為節(jié)點添加PersonID屬性。
接下來三列OrderID,ProductID,Price引用OrderDetail表,因此在Order節(jié)點下創(chuàng)建OrderDetail子節(jié)點 列的別名顯示為屬性名稱,沒有別名使用列名,節(jié)點的名稱使用表別名,沒有別名使用表名。
Order By對XML結(jié)構(gòu)的影響
再看個例子,對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')
輸出結(jié)果:
其實這個結(jié)果與***個查詢結(jié)果是一樣滴,行默認順序會影響XML結(jié)果,排序也會影響XML結(jié)構(gòu),只要當前行與上一行數(shù)據(jù)可以合并時,就會影響XML結(jié)構(gòu),再來看一個排序影響XML結(jié)構(gòu)的例子,這次以O(shè)rderDetail.ProductID排序,直接看結(jié)果:
以上就是FOR XML AUTO的應(yīng)用的相關(guān)知識,本文我們就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
當前題目:SQLServer數(shù)據(jù)庫中FORXMLAUTO的使用詳解續(xù)
當前路徑:http://fisionsoft.com.cn/article/djhdcco.html


咨詢
建站咨詢
