成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server數據庫中FOR XML AUTO的使用詳解續

數據庫 SQL Server
本文我們主要介紹了SQL Server數據庫中FOR XML AUTO的使用的一些詳細的例子以及Order by對XML的影響的實例,希望能夠對您有所幫助。

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

  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 行受影響) 

理下其中的關系:

會員表Person與訂單表Order為一對多關系,其中Order.PersonID = Person.ID

訂單表與訂單詳情表為一對多關系,其中OrderDetail.OrderID = Order.ID

產品表與訂單詳情表為一對多關系,其中OrderDetail.ProductID = Product.ID

如下圖1

SQL Server數據庫中FOR XML AUTO的使用詳解續圖1

可以開始了:

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

  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') 

查詢結果如下:

  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> 

調整下查詢列的順序,再看下結果,變了啊:

  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') 

輸出結果很猛:

  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結構變了,是變了,MSDN中是這樣解釋滴:

***個ID引用自Order表,故創建Order節點,PersonID同樣引用自Order表,***步已經創建Order節點,故此處僅為節點添加PersonID屬性。

接下來三列OrderID,ProductID,Price引用OrderDetail表,因此在Order節點下創建OrderDetail子節點 列的別名顯示為屬性名稱,沒有別名使用列名,節點的名稱使用表別名,沒有別名使用表名。

Order By對XML結構的影響

再看個例子,對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') 

輸出結果:

  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> 

其實這個結果與***個查詢結果是一樣滴,行默認順序會影響XML結果,排序也會影響XML結構,只要當前行與上一行數據可以合并時,就會影響XML結構,再來看一個排序影響XML結構的例子,這次以OrderDetail.ProductID排序,直接看結果:

  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的應用的相關知識,本文我們就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

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

2011-08-22 13:28:56

FOR XMLSQL Server

2011-08-24 12:49:56

SQL Server托管代碼

2011-08-11 09:12:31

SQL Server nolock

2011-08-22 11:39:53

SQL Server數PIVOT

2021-03-18 08:20:19

SQLServer數據庫SQL

2011-08-15 14:29:52

SQL Server數事務

2011-08-15 13:48:47

SQL ServerROW_NUMBER(

2011-04-02 11:02:54

SQL Server數文件恢復

2011-08-19 14:53:02

SQL ServerDataRelatio

2011-08-30 11:04:30

鏈接查詢內連接外連接

2011-08-22 10:47:09

SQL Server流水號

2010-03-16 10:12:40

SQL Server

2010-09-08 16:03:57

SQL臨時表數據庫

2010-07-15 17:28:50

SQL Server

2011-04-13 15:44:12

SQL Server數函數

2010-07-08 15:55:25

SQL Server

2011-04-02 11:14:20

SQL Server數XML

2011-08-25 13:41:50

SQL Server 變更跟蹤

2011-08-09 09:31:39

SQL Server數connectionS

2009-07-07 17:42:28

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品国产三级国产aⅴ中文 | 麻豆久久久9性大片 | 日本不卡高字幕在线2019 | 久久午夜精品福利一区二区 | 亚洲精品成人 | 久久精品国产一区二区电影 | 日本不卡一区二区三区 | 亚洲久草 | 精品视频一区二区三区在线观看 | 国产精品久久久久久久久久软件 | 二区在线观看 | 国产精品久久久久久久白浊 | 密色视频 | 毛片一级电影 | 亚洲精品一区二区二区 | 久久久久国产一区二区三区四区 | 午夜影院在线免费观看视频 | 一级毛片播放 | 一区二区在线看 | 国产日产欧产精品精品推荐蛮挑 | 激情六月天| 欧美日韩在线综合 | 久久中文一区二区 | 日韩免费视频一区二区 | 亚洲精品视 | 日韩高清中文字幕 | 国产91综合一区在线观看 | 一区二区三区四区在线播放 | 亚洲精品久久久久久国产精华液 | 高清亚洲 | 国产一区免费 | 女生羞羞网站 | 麻豆久久久9性大片 | 91久久精品日日躁夜夜躁国产 | 免费黄网站在线观看 | 国产91久久精品一区二区 | 91久久精品国产91久久 | 91精品国产综合久久久久久丝袜 | 亚洲欧美国产视频 | 国产一区二区三区高清 | 91天堂网 |