自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server數(shù)據(jù)庫中FOR XML AUTO的使用詳解續(xù)

數(shù)據(jù)庫 SQL Server
本文我們主要介紹了SQL Server數(shù)據(jù)庫中FOR XML AUTO的使用的一些詳細(xì)的例子以及Order by對XML的影響的實例,希望能夠?qū)δ兴鶐椭?/div>

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

  1. CREATE TABLE Person(  
  2. ID INT IDENTITY(1,1) NOT NULL,  
  3. Name NVARCHAR(20) NOT NULL DEFAULT(''),  
  4. Age INT DEFAULT(0) NOT NULL,  
  5. Sex BIT DEFAULT(0) NOT NULL  
  6. )  
  7. --DROP TABLE [Order]  
  8. CREATE TABLE [Order](  
  9. ID INT IDENTITY(1,1) PRIMARY KEY,  
  10. PersonID INT DEFAULT(0) NOT NULL,  
  11. TotalPrice DECIMAL DEFAULT(0) NOT NULL  
  12. )  
  13. CREATE TABLE Product(  
  14. ID INT IDENTITY(1,1) PRIMARY KEY,  
  15. Price DECIMAL(8,2) DEFAULT(0.00) NOT NULL,  
  16. Img NVARCHAR(50) DEFAULT('') NOT NULL  
  17. )  
  18. CREATE TABLE OrderDetail(  
  19. ID INT IDENTITY(1,1) PRIMARY KEY,  
  20. OrderID INT DEFAULT(0) NOT NULL,  
  21. ProductID INT DEFAULT(0) NOT NULL,  
  22. Price DECIMAL(8,2) DEFAULT(0.00) NOT NULL  
  23. )  
  24. INSERT INTO Person(Name,Age,Sex)  
  25. SELECT '張三',28,1 UNION ALL  
  26. SELECT '李四',28,1 UNION ALL  
  27. SELECT '王五',28,1   
  28. INSERT INTO [Order](PersonID,TotalPrice)  
  29. SELECT 1,100.0 UNION ALL  
  30. SELECT 1,111.0 UNION ALL  
  31. SELECT 2,112.0 UNION ALL  
  32. SELECT 3,98.0 UNION ALL  
  33. SELECT 3,150.49 UNION ALL  
  34. SELECT 3,58  
  35. INSERT INTO Product(Price,Img)  
  36. SELECT 101.0,'1.png' UNION ALL  
  37. SELECT 102.0,'2.png' UNION ALL  
  38. SELECT 103.0,'3.png' UNION ALL  
  39. SELECT 104.0,'4.png' UNION ALL  
  40. SELECT 105.0,'5.png'  
  41. INSERT INTO OrderDetail(OrderID,ProductID,Price)  
  42. SELECT TOP 3 3,ID,Price FROM Product  
  43. SELECT * FROM Person  
  44. SELECT * FROM [Order]  
  45. SELECT * FROM Product  
  46. SELECT * FROM OrderDetail  
  47. Person  
  48. ID Name Age Sex  
  49. ----------- -------------------- ----------- -----  
  50. 1 張三 28 1  
  51. 2 李四 28 1  
  52. 3 王五 28 1  
  53. (3 行受影響)  
  54. [Order]  
  55. ID PersonID TotalPrice  
  56. ----------- ----------- ---------------------------------------  
  57. 1 1 100  
  58. 2 1 111  
  59. 3 2 112  
  60. 4 3 98  
  61. 5 3 150  
  62. 6 3 58  
  63. (6 行受影響)  
  64. Product  
  65. ID Price Img  
  66. ----------- --------------------------------------- --------------------------------------------------  
  67. 1 101.00 1.png  
  68. 2 102.00 2.png  
  69. 3 103.00 3.png  
  70. 4 104.00 4.png  
  71. 5 105.00 5.png  
  72. (5 行受影響)  
  73. OrderDetail  
  74. ID OrderID ProductID Price  
  75. ----------- ----------- ----------- ---------------------------------------  
  76. 1 1 1 101.00  
  77. 2 1 2 102.00  
  78. 3 1 3 103.00  
  79. 4 1 4 104.00  
  80. 5 1 5 105.00  
  81. 6 2 1 101.00  
  82. 7 2 2 102.00  
  83. 8 2 3 103.00  
  84. 9 3 1 101.00  
  85. 10 3 2 102.00  
  86. 11 3 3 103.00  
  87. (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

SQL Server數(shù)據(jù)庫中FOR XML AUTO的使用詳解續(xù)圖1

可以開始了:

先來看有那些訂單,分別為誰的訂單,以及訂單詳情,SQL腳本及查詢結(jié)果如下:

  1. 1: SELECT   
  2. 2: [Order].ID,  
  3. 3: [Order].PersonID,  
  4. 4: OrderDetail.OrderID,  
  5. 5: OrderDetail.ProductID,  
  6. 6: OrderDetail.Price  
  7. 7: FROM [Order]  
  8. 8: INNER JOIN OrderDetail ON [Order].ID = OrderDetail.OrderID  
  9. 9: FOR XML AUTO,ROOT('Record') 

查詢結(jié)果如下:

  1. 1: <Record> 
  2. 2: <Order ID="1" PersonID="1"> 
  3. 3: <OrderDetail OrderID="1" ProductID="1" Price="101.00" /> 
  4. 4: <OrderDetail OrderID="1" ProductID="2" Price="102.00" /> 
  5. 5: <OrderDetail OrderID="1" ProductID="3" Price="103.00" /> 
  6. 6: <OrderDetail OrderID="1" ProductID="4" Price="104.00" /> 
  7. 7: <OrderDetail OrderID="1" ProductID="5" Price="105.00" /> 
  8. 8: </Order> 
  9. 9: <Order ID="2" PersonID="1"> 
  10. 10: <OrderDetail OrderID="2" ProductID="1" Price="101.00" /> 
  11. 11: <OrderDetail OrderID="2" ProductID="2" Price="102.00" /> 
  12. 12: <OrderDetail OrderID="2" ProductID="3" Price="103.00" /> 
  13. 13: </Order> 
  14. 14: <Order ID="3" PersonID="2"> 
  15. 15: <OrderDetail OrderID="3" ProductID="1" Price="101.00" /> 
  16. 16: <OrderDetail OrderID="3" ProductID="2" Price="102.00" /> 
  17. 17: <OrderDetail OrderID="3" ProductID="3" Price="103.00" /> 
  18. 18: </Order> 
  19. 19: </Record> 

調(diào)整下查詢列的順序,再看下結(jié)果,變了?。?/p>

  1. SELECT   
  2. OrderDetail.OrderID,  
  3. OrderDetail.ProductID,  
  4. OrderDetail.Price,  
  5. [Order].ID,  
  6. [Order].PersonID  
  7. FROM [Order]  
  8. INNER JOIN OrderDetail ON [Order].ID = OrderDetail.OrderID  
  9. FOR XML AUTO,ROOT('Record') 

輸出結(jié)果很猛:

  1. <Record> 
  2. <OrderDetail OrderID="1" ProductID="1" Price="101.00"> 
  3. <Order ID="1" PersonID="1" /> 
  4. </OrderDetail> 
  5. <OrderDetail OrderID="1" ProductID="2" Price="102.00"> 
  6. <Order ID="1" PersonID="1" /> 
  7. </OrderDetail> 
  8. <OrderDetail OrderID="1" ProductID="3" Price="103.00"> 
  9. <Order ID="1" PersonID="1" /> 
  10. </OrderDetail> 
  11. <OrderDetail OrderID="1" ProductID="4" Price="104.00"> 
  12. <Order ID="1" PersonID="1" /> 
  13. </OrderDetail> 
  14. <OrderDetail OrderID="1" ProductID="5" Price="105.00"> 
  15. <Order ID="1" PersonID="1" /> 
  16. </OrderDetail> 
  17. <OrderDetail OrderID="2" ProductID="1" Price="101.00"> 
  18. <Order ID="2" PersonID="1" /> 
  19. </OrderDetail> 
  20. <OrderDetail OrderID="2" ProductID="2" Price="102.00"> 
  21. <Order ID="2" PersonID="1" /> 
  22. </OrderDetail> 
  23. <OrderDetail OrderID="2" ProductID="3" Price="103.00"> 
  24. <Order ID="2" PersonID="1" /> 
  25. </OrderDetail> 
  26. <OrderDetail OrderID="3" ProductID="1" Price="101.00"> 
  27. <Order ID="3" PersonID="2" /> 
  28. </OrderDetail> 
  29. <OrderDetail OrderID="3" ProductID="2" Price="102.00"> 
  30. <Order ID="3" PersonID="2" /> 
  31. </OrderDetail> 
  32. <OrderDetail OrderID="3" ProductID="3" Price="103.00"> 
  33. <Order ID="3" PersonID="2" /> 
  34. </OrderDetail> 
  35. </Record> 

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排序:

  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. ORDER BY [Order].PersonId  
  10. FOR XML AUTO,ROOT('Record') 

輸出結(jié)果:

  1. <Record> 
  2. <Order ID="1" PersonID="1"> 
  3. <OrderDetail OrderID="1" ProductID="1" Price="101.00" /> 
  4. <OrderDetail OrderID="1" ProductID="2" Price="102.00" /> 
  5. <OrderDetail OrderID="1" ProductID="3" Price="103.00" /> 
  6. <OrderDetail OrderID="1" ProductID="4" Price="104.00" /> 
  7. <OrderDetail OrderID="1" ProductID="5" Price="105.00" /> 
  8. </Order> 
  9. <Order ID="2" PersonID="1"> 
  10. <OrderDetail OrderID="2" ProductID="1" Price="101.00" /> 
  11. <OrderDetail OrderID="2" ProductID="2" Price="102.00" /> 
  12. <OrderDetail OrderID="2" ProductID="3" Price="103.00" /> 
  13. </Order> 
  14. <Order ID="3" PersonID="2"> 
  15. <OrderDetail OrderID="3" ProductID="1" Price="101.00" /> 
  16. <OrderDetail OrderID="3" ProductID="2" Price="102.00" /> 
  17. <OrderDetail OrderID="3" ProductID="3" Price="103.00" /> 
  18. </Order> 
  19. </Record> 

其實這個結(jié)果與***個查詢結(jié)果是一樣滴,行默認(rèn)順序會影響XML結(jié)果,排序也會影響XML結(jié)構(gòu),只要當(dāng)前行與上一行數(shù)據(jù)可以合并時,就會影響XML結(jié)構(gòu),再來看一個排序影響XML結(jié)構(gòu)的例子,這次以O(shè)rderDetail.ProductID排序,直接看結(jié)果:

  1. <Record> 
  2. <Order ID="1" PersonID="1"> 
  3. <OrderDetail OrderID="1" ProductID="1" Price="101.00" /> 
  4. </Order> 
  5. <Order ID="2" PersonID="1"> 
  6. <OrderDetail OrderID="2" ProductID="1" Price="101.00" /> 
  7. </Order> 
  8. <Order ID="3" PersonID="2"> 
  9. <OrderDetail OrderID="3" ProductID="1" Price="101.00" /> 
  10. <OrderDetail OrderID="3" ProductID="2" Price="102.00" /> 
  11. </Order> 
  12. <Order ID="2" PersonID="1"> 
  13. <OrderDetail OrderID="2" ProductID="2" Price="102.00" /> 
  14. </Order> 
  15. <Order ID="1" PersonID="1"> 
  16. <OrderDetail OrderID="1" ProductID="2" Price="102.00" /> 
  17. <OrderDetail OrderID="1" ProductID="3" Price="103.00" /> 
  18. </Order> 
  19. <Order ID="2" PersonID="1"> 
  20. <OrderDetail OrderID="2" ProductID="3" Price="103.00" /> 
  21. </Order> 
  22. <Order ID="3" PersonID="2"> 
  23. <OrderDetail OrderID="3" ProductID="3" Price="103.00" /> 
  24. </Order> 
  25. <Order ID="1" PersonID="1"> 
  26. <OrderDetail OrderID="1" ProductID="4" Price="104.00" /> 
  27. <OrderDetail OrderID="1" ProductID="5" Price="105.00" /> 
  28. </Order> 
  29. </Record> 

以上就是FOR XML AUTO的應(yīng)用的相關(guān)知識,本文我們就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. JSP鏈接SQL Server 2005出錯的解決方法
  2. JDBC調(diào)用帶輸出參數(shù)的存儲過程的實例解析
  3. SQL Server數(shù)據(jù)庫多表關(guān)聯(lián)匯總查詢的問題解決
  4. 設(shè)置SQL Server數(shù)據(jù)庫AWE機制使其支持大內(nèi)存
  5. SQL Server 2008數(shù)據(jù)庫被標(biāo)記為可疑的解決方法
責(zé)任編輯:趙鵬 來源: 博客園
相關(guān)推薦

2011-08-22 13:28:56

FOR XMLSQL Server

2011-08-22 11:39:53

SQL Server數(shù)PIVOT

2011-08-24 12:49:56

SQL Server托管代碼

2011-08-11 09:12:31

SQL Server nolock

2021-03-18 08:20:19

SQLServer數(shù)據(jù)庫SQL

2011-08-15 14:29:52

SQL Server數(shù)事務(wù)

2011-08-15 13:48:47

SQL ServerROW_NUMBER(

2011-08-30 11:04:30

鏈接查詢內(nèi)連接外連接

2011-08-22 10:47:09

SQL Server流水號

2010-07-15 17:28:50

SQL Server

2011-08-19 14:53:02

SQL ServerDataRelatio

2011-04-02 11:02:54

SQL Server數(shù)文件恢復(fù)

2011-08-25 13:41:50

SQL Server 變更跟蹤

2009-02-23 13:41:42

XML操作函數(shù)SQL Server

2010-03-16 10:12:40

SQL Server

2010-09-08 16:03:57

SQL臨時表數(shù)據(jù)庫

2011-04-13 15:44:12

SQL Server數(shù)函數(shù)

2009-04-30 09:28:05

SynonymOpenquerySQL Server

2010-07-08 11:05:14

SQL Server數(shù)

2010-07-08 15:55:25

SQL Server
點贊
收藏

51CTO技術(shù)棧公眾號