一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQLSERVER 2005中使用sql語句對xml文件和其數據的進行操作(很全面)

SQLSERVER 2005中使用sql語句對xml文件和其數據的進行操作(很全面)

2020-07-01 15:32mssql教程網 Sql Server

由于數據庫對xml數據直接處理有很多優勢,05也對這方面加強了功能。下面是一些實例代碼,大家可以參考下。

  1. -用SQL多條可以將多條數據組成一棵XML樹L一次插入  
  2. --將XML樹作為varchar參數傳入用  
  3. --insert xx select xxx from openxml() 的語法插入數據  
  4. -----------------------------------導入,導出xml--------------------------  
  5.  
  6. --1導入實例  
  7. --單個表  
  8. create table Xmltable(Name nvarchar(20),Nowtime nvarchar(20))  
  9. declare @s as nvarchar(2000);  
  10. set @s = N''  
  11. <Xmltables>  
  12. <Xmltable Name="1" Nowtime="1900-1-1">0</Xmltable>  
  13. <Xmltable Name="2" Nowtime="1900-1-1">0</Xmltable>  
  14. <Xmltable Name="3" Nowtime="1900-1-1">0</Xmltable>  
  15. <Xmltable Name="4" Nowtime="1900-1-1">0</Xmltable>  
  16. <Xmltable Name="5" Nowtime="1900-1-1">0</Xmltable>  
  17. </Xmltables>'';  
  18. declare @idHandle as int ;  
  19. EXEC sp_xml_preparedocument @idHandle OUTPUT, @s  
  20. insert into Xmltable(Name,Nowtime)  
  21. select * from openxml(@idHandle,N''/Xmltables/Xmltable'')  
  22. with dbo.xmltable  
  23. EXEC sp_xml_removedocument @idHandle  
  24. select * from Xmltable  
  25. -----------------------讀入第二個表數據--------------------  
  26. create table Xmlta(Name nvarchar(20),Nowtime nvarchar(20))  
  27. declare @s as nvarchar(4000);  
  28. set @s =N''  
  29. <Xmltables>  
  30. <Xmltb Name="6" Nowtime="1900-2-1">0</Xmltable>  
  31. <Xmlta Name="11" Nowtime="1900-2-1">0</Xmlta>  
  32. </Xmltables>  
  33. '';  
  34. declare @idHandle as int ;  
  35. EXEC sp_xml_preparedocument @idHandle OUTPUT, @s  
  36. insert into Xmlta(Name,Nowtime)  
  37. select * from openxml(@idHandle,N''/Xmltables/Xmlta'')  
  38. with dbo.xmlta  
  39. EXEC sp_xml_removedocument @idHandle  
  40. select * from Xmlta  
  41. drop table Xmlta  
  42. -----------------------同時讀入多表數據----------------  
  43. create table Xmlta(Name nvarchar(20),Nowtime datetime)  
  44. create table Xmltb(Name nvarchar(20),Nowtime datetime)  
  45. declare @s as nvarchar(4000);  
  46. set @s =N''  
  47. <Xmltables>  
  48. <Xmlta Name="1" Nowtime="1900-2-1">0</Xmlta>  
  49. <Xmltb Name="2" Nowtime="1900-2-1">0</Xmltb>  
  50. </Xmltables>  
  51. '';  
  52. --<Xmlta ></Xmlta> 則插入的數據為null  
  53. declare @idHandle as int ;  
  54. EXEC sp_xml_preparedocument @idHandle OUTPUT, @s  
  55. --表a  
  56. insert into Xmlta(Name,Nowtime)  
  57. select * from openxml(@idHandle,N''/Xmltables/Xmlta'')  
  58. with dbo.Xmlta  
  59. --表b  
  60. insert into Xmltb(Name,Nowtime)  
  61. select * from openxml(@idHandle,N''/Xmltables/Xmltb'')  
  62. with dbo.Xmltb  
  63. EXEC sp_xml_removedocument @idHandle  
  64. select * from Xmlta  
  65. select * from Xmltb  
  66. drop table Xmlta,Xmltb  
  67. --生成xml文件單表  
  68. DECLARE @xVar XML  
  69. SET @xVar = (SELECT * FROM Xmltable FOR XML AUTO,TYPE)  
  70. select @xVar  
  71.  
  72.  
  73. --1讀取xml文件插入表中  
  74. DECLARE @hdoc int  
  75. DECLARE @doc xml  
  76. select @doc=BulkColumn from (SELECT *  
  77. FROM OPENROWSET(BULK ''E:\xml.xml'',SINGLE_BLOB) a)b  
  78. EXEC sp_xml_preparedocument @hdoc OUTPUT,@doc  
  79. SELECT * into #temp  
  80. FROM OPENXML (@hdoc,N''/root/dbo.xmltable'')  
  81. with (name nvarchar(20),Intro nvarchar(20))  
  82. exec sp_xml_removedocument @hdoc  
  83. --2讀取xml文件插入表中  
  84. SELECT * into #temp FROM OPENROWSET(  
  85. BULK ''E:\xml.xml'',SINGLE_BLOB) AS x  
  86. DECLARE @hdoc int  
  87. DECLARE @doc xml  
  88. select @doc=BulkColumn from #temp  
  89. EXEC sp_xml_preparedocument @hdoc OUTPUT,@doc  
  90. SELECT * into #temp2  
  91. FROM OPENXML (@hdoc,N''/root/dbo.xmltable'')  
  92. with (name nvarchar(20),Intro nvarchar(20))  
  93. exec sp_xml_removedocument @hdoc  
  94. /*  
  95. ---空的處理  
  96. <dbo.xmltable name="1" Intro="" />  
  97. <dbo.xmltable name="2" />  
  98. <dbo.xmltable name="3" Intro="c" />  
  99.  
  100. 2 NULL  
  101. 3 c  
  102. */  
  103. drop table xmlt  
  104. ------------------------------------xml數據操作------------------  
  105. --類型化的XML  
  106. CREATE TABLE xmlt(ID INT PRIMARY KEY, xCol XML not null)  
  107. --T-sql生成數據  
  108. insert into xmlt values(1,  
  109. ''<Xmltables>  
  110. <Xmltable Name="1" NowTime="1900-1-1">1</Xmltable>  
  111. <Xmltable Name="2" NowTime="1900-1-2">2</Xmltable>  
  112. <Xmltable Name="3" NowTime="1900-1-3">3</Xmltable>  
  113. <Xmltable Name="4" NowTime="1900-1-4">4</Xmltable>  
  114. <Xmltable Name="5" NowTime="1900-1-5">5</Xmltable>  
  115. </Xmltables>'')  
  116. --dataset生成數據  
  117. insert into xmlt values(2,  
  118. ''<?xml version="1.0" encoding="gb2312" ?>  
  119. <Xmltables>  
  120. <Xmltable><Name>1</Name><NowTime>1900-1-1</NowTime>1</Xmltable>  
  121. <Xmltable><Name>2</Name><NowTime>1900-1-2</NowTime>2</Xmltable>  
  122. <Xmltable><Name>3</Name><NowTime>1900-1-3</NowTime>3</Xmltable>  
  123. </Xmltables>'')  
  124. --讀取Name=1 的節點,請使用  
  125. SELECT xCol.query(''/Xmltables/Xmltable[@Name="1"]'') from xmlt where ID =1  
  126. --讀取Name=1 的節點值,請使用  
  127. SELECT xCol.query(''/Xmltables/Xmltable[@Name="1"]/text()'') from xmlt where ID =1  
  128. --讀取Name=5 的Name 屬性值,請使用  
  129. SELECT xCol.query(''data(/Xmltables/Xmltable[@Name])[5]'') from xmlt where ID =1  
  130. --讀取所有節點Name  
  131. SELECT nref.value(''@Name''''varchar(max)'') LastName  
  132. FROM xmlt CROSS APPLY xCol.nodes(''/Xmltables/Xmltable'') AS R(nref) where ID=1  
  133. --讀取所有節點NowTime  
  134. SELECT nref.value(''@NowTime''''varchar(max)'') LastName  
  135. FROM xmlt CROSS APPLY xCol.nodes(''/Xmltables/Xmltable'') AS R(nref) where ID=1  
  136. SELECT xCol.query(''data(/Xmltables/Xmltable[@Name=5]/@NowTime)[1]'') from xmlt where ID =1  
  137. --讀取Name=1 的Name 屬性值  
  138. SELECT xCol.value(''data(/Xmltables/Xmltable//Name)[1]'',''nvarchar(max)'') FROM xmlt where ID=2  
  139. --讀取NowTime=1 的NowTime 屬性值  
  140. SELECT xCol.value(''data(/Xmltables/Xmltable/NowTime)[1]'',''nvarchar(max)'') FROM xmlt where ID=2  
  141. --SELECT xCol.value(''data(/Xmltables/Xmltable[@Name])[1]'',''nvarchar(max)'') FROM xmlt where ID=2  
  142.  
  143. ------------------------------------------函數使用----------------  
  144. --query()、exist()  
  145. SELECT pk, xCol.query(''/root/dbo.xmltable/name'') FROM docs  
  146. SELECT xCol.query(''/root/dbo.xmltable/name'') FROM docs  
  147. WHERE xCol.exist (''/root/dbo.xmltable'') = 1  
  148. --modify()  
  149. UPDATE docs SET xCol.modify(''  
  150. insert  
  151. <section num="2">  
  152. <heading>Background</heading>  
  153. </section>  
  154. after (/doc/section[@num=1])[1]'')  
  155. --value()  
  156. SELECT xCol.value(''data((/root/dbo.xmltable//name))[2]'',''nvarchar(max)'') FROM docs  
  157. where pk=3  
  158. --nodes()  
  159. SELECT nref.value(''@Name''''varchar(max)'') LastName  
  160. FROM xmlt CROSS APPLY xCol.nodes(''/Xmltables/Xmltable'') AS R(nref)  
  161. --query()、value()、exist() 和nodes(),modify()  
  162. SELECT CAST(T.c as xml).query(''/root/dbo.xmltable/name'')  
  163. FROM OPENROWSET(BULK ''E:\xml.xml'',SINGLE_BLOB) T(c) 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 97精品国产高清在线看入口 | 国产精品视频播放 | 日本三级在丈面前被耍了 | 韩国美女豪爽一级毛片 | 处女摘花视频 | 成在线人免费 | 国产香蕉国产精品偷在线观看 | 校服下的白嫩小乳尖h1v1 | 免费一级毛片在级播放 | 无毛黄片 | 日本一二线不卡在线观看 | 日本乱子| 亚洲人成网站在线观看青青 | 国产精品日本一区二区三区在线看 | 日韩国产欧美精品综合二区 | 岛国a香蕉片不卡在线观看 荡女淫春2古装 | 国产情侣露脸自拍 | 成人影院vs一区二区 | 亚洲视频在线观看免费视频 | 污污在线免费观看 | 免费波多野结衣庭教师 | 2018av在线 | 四虎影音 | 四虎精品成人免费观看 | 无码任你躁久久久久久久 | 全黄h全肉细节修仙玄幻文 全彩调教侵犯h本子全彩妖气he | 国产亚洲人成网站在线观看不卡 | 国产一区二区三区免费在线视频 | 国内小情侣一二三区在线视频 | 继攵催眠女乱h调教 | 激情视频在线播放 | 好男人天堂网 | 黄德维| 国产成人精品系列在线观看 | 日本高清在线观看天码888 | 九九精品国产 | 国产午夜精品久久久久 | 给我视频免费看 | 香蕉久久ac一区二区三区 | 精品国产精品国产偷麻豆 | 久久精品18 |