当前位置:Gxlcms > mssql > SQLServer解析XML数据的方法详解

SQLServer解析XML数据的方法详解

时间:2021-07-01 10:21:17 帮助过:19人阅读

本文实例讲述了SQL Server解析XML数据的方法。分享给大家供大家参考,具体如下:

  1. --5.读取XML
  2. --下面为多种方法从XML中读取EMAIL
  3. DECLARE @x XML
  4. SELECT @x = '
  5. <People>
  6. <dongsheng>
  7. <Info Name="Email">dongsheng@xxyy.com</Info>
  8. <Info Name="Phone">678945546</Info>
  9. <Info Name="qq">36575</Info>
  10. </dongsheng>
  11. </People>'
  12. -- 方法1
  13. SELECT @x.value('data(/People/dongsheng/Info[@Name="Email"])[1]', 'varchar(30)')
  14. -- 方法2
  15. SELECT @x.value('(/People/dongsheng/Info[@Name="Email"])[1]', 'varchar(30)')
  16. -- 方法3
  17. SELECT
  18. C.value('.','varchar(30)')
  19. FROM @x.nodes('/People/dongsheng/Info[@Name="Email"]') T(C)
  20. -- 方法4
  21. SELECT
  22. C.value('(Info[@Name="Email"])[1]','varchar(30)')
  23. FROM @x.nodes('/People/dongsheng') T(C)
  24. -- 方法5
  25. SELECT
  26. C.value('(dongsheng/Info[@Name="Email"])[1]','varchar(30)')
  27. FROM @x.nodes('/People') T(C)
  28. -- 方法6
  29. SELECT
  30. C.value('.','varchar(30)')
  31. FROM @x.nodes('/People/dongsheng/Info') T(C)
  32. WHERE C.value('(.[@Name="Email"])[1]','varchar(30)') IS NOT NULL
  33. -- 方法7
  34. SELECT
  35. C.value('.','varchar(30)')
  36. FROM @x.nodes('/People/dongsheng/Info') T(C)
  37. WHERE C.exist('(.[@Name="Email"])[1]') = 1
  38. --6.Reading values from an XML variable
  39. DECLARE @x XML
  40. SELECT @x =
  41. '<Peoples>
  42. <People Name="tudou" Sex="女" />
  43. <People Name="choushuigou" Sex="女"/>
  44. <People Name="dongsheng" Sex="男" />
  45. </Peoples>'
  46. SELECT
  47. v.value('@Name[1]','VARCHAR(20)') AS Name,
  48. v.value('@Sex[1]','VARCHAR(20)') AS Sex
  49. FROM @x.nodes('/Peoples/People') x(v)
  50. --7.多属性过滤
  51. DECLARE @x XML
  52. SELECT @x = '
  53. <Employees>
  54. <Employee id="1234" dept="IT" type="合同工">
  55. <Info NAME="dongsheng" SEX="男" QQ="5454545454"/>
  56. </Employee>
  57. <Employee id="5656" dept="IT" type="临时工">
  58. <Info NAME="土豆" SEX="女" QQ="5345454554"/>
  59. </Employee>
  60. <Employee id="3242" dept="市场" type="合同工">
  61. <Info NAME="choushuigou" SEX="女" QQ="54543545"/>
  62. </Employee>
  63. </Employees>'
  64. --查询dept为IT的人员信息
  65. --方法1
  66. SELECT
  67. C.value('@NAME[1]','VARCHAR(10)') AS NAME,
  68. C.value('@SEX[1]','VARCHAR(10)') AS SEX,
  69. C.value('@QQ[1]','VARCHAR(20)') AS QQ
  70. FROM @x.nodes('/Employees/Employee[@dept="IT"]/Info') T(C)
  71. /*
  72. NAME SEX QQ
  73. ---------- ---------- --------------------
  74. dongsheng 男 5454545454
  75. 土豆 女 5345454554
  76. */
  77. --方法2
  78. SELECT
  79. C.value('@NAME[1]','VARCHAR(10)') AS NAME,
  80. C.value('@SEX[1]','VARCHAR(10)') AS SEX,
  81. C.value('@QQ[1]','VARCHAR(20)') AS QQ
  82. FROM @x.nodes('//Employee[@dept="IT"]/*') T(C)
  83. /*
  84. NAME SEX QQ
  85. ---------- ---------- --------------------
  86. dongsheng 男 5454545454
  87. 土豆 女 5345454554
  88. */
  89. --查询出IT部门type为Permanent的员工
  90. SELECT
  91. C.value('@NAME[1]','VARCHAR(10)') AS NAME,
  92. C.value('@SEX[1]','VARCHAR(10)') AS SEX,
  93. C.value('@QQ[1]','VARCHAR(20)') AS QQ
  94. FROM @x.nodes('//Employee[@dept="IT"][@type="合同工"]/*') T(C)
  95. /*
  96. NAME SEX QQ
  97. ---------- ---------- --------------------
  98. dongsheng 男 5454545454
  99. */
  100. --12.从XML变量中删除元素
  101. DECLARE @x XML
  102. SELECT @x = '
  103. <Peoples>
  104. <People>
  105. <NAME>土豆</NAME>
  106. <SEX>男</SEX>
  107. <QQ>5345454554</QQ>
  108. </People>
  109. </Peoples>'
  110. SET @x.modify('
  111. delete (/Peoples/People/SEX)[1]'
  112. )
  113. SELECT @x
  114. /*
  115. <Peoples>
  116. <People>
  117. <NAME>土豆</NAME>
  118. <QQ>5345454554</QQ>
  119. </People>
  120. </Peoples>
  121. */
  122. --19.读取指定变量元素的值
  123. DECLARE @x XML
  124. SELECT @x = '
  125. <Peoples>
  126. <People>
  127. <NAME>dongsheng</NAME>
  128. <SEX>男</SEX>
  129. <QQ>423545</QQ>
  130. </People>
  131. <People>
  132. <NAME>土豆</NAME>
  133. <SEX>男</SEX>
  134. <QQ>123133</QQ>
  135. </People>
  136. <People>
  137. <NAME>choushuigou</NAME>
  138. <SEX>女</SEX>
  139. <QQ>54543545</QQ>
  140. </People>
  141. </Peoples>
  142. '
  143. DECLARE @ElementName VARCHAR(20)
  144. SELECT @ElementName = 'NAME'
  145. SELECT c.value('.','VARCHAR(20)') AS NAME
  146. FROM @x.nodes('/Peoples/People/*[local-name()=sql:variable("@ElementName")]') T(C)
  147. /*
  148. NAME
  149. --------------------
  150. dongsheng
  151. 土豆
  152. choushuigou
  153. */
  154. --20使用通配符读取元素值
  155. --读取根元素的值
  156. DECLARE @x1 XML
  157. SELECT @x1 = '<People>dongsheng</People>'
  158. SELECT @x1.value('(/*/text())[1]','VARCHAR(20)') AS People --星号*代表一个元素
  159. /*
  160. People
  161. --------------------
  162. dongsheng
  163. */
  164. --读取第二层元素的值
  165. DECLARE @x XML
  166. SELECT @x = '
  167. <People>
  168. <NAME>dongsheng</NAME>
  169. <SEX>男</SEX>
  170. <QQ>423545</QQ>
  171. </People>'
  172. SELECT
  173. @x.value('(/*/*/text())[1]','VARCHAR(20)') AS NAME
  174. /*
  175. NAME
  176. --------------------
  177. dongsheng
  178. */
  179. --读取第二个子元素的值
  180. DECLARE @x XML
  181. SELECT @x = '
  182. <People>
  183. <NAME>dongsheng</NAME>
  184. <SEX>男</SEX>
  185. <QQ>423545</QQ>
  186. </People>'
  187. SELECT
  188. @x.value('(/*/*/text())[2]','VARCHAR(20)') AS SEX
  189. /*
  190. SEX
  191. --------------------
  192. */
  193. --读取所有第二层子元素值
  194. DECLARE @x XML
  195. SELECT @x = '
  196. <People>
  197. <NAME>dongsheng</NAME>
  198. <SEX>男</SEX>
  199. <QQ>423545</QQ>
  200. </People>'
  201. SELECT
  202. C.value('.','VARCHAR(20)') AS value
  203. FROM @x.nodes('/*/*') T(C)
  204. /*
  205. value
  206. --------------------
  207. dongsheng
  208. 423545
  209. */
  210. --21.使用通配符读取元素名称
  211. DECLARE @x XML
  212. SELECT @x = '<People>dongsheng</People>'
  213. SELECT
  214. @x.value('local-name(/*[1])','VARCHAR(20)') AS ElementName
  215. /*
  216. ElementName
  217. --------------------
  218. People
  219. */
  220. --读取根下第一个元素的名称和值
  221. DECLARE @x XML
  222. SELECT @x = '
  223. <People>
  224. <NAME>dongsheng</NAME>
  225. <SEX>男</SEX>
  226. </People>'
  227. SELECT
  228. @x.value('local-name((/*/*)[1])','VARCHAR(20)') AS ElementName,
  229. @x.value('(/*/*/text())[1]','VARCHAR(20)') AS ElementValue
  230. /*
  231. ElementName ElementValue
  232. -------------------- --------------------
  233. NAME dongsheng
  234. */
  235. --读取根下第二个元素的名称和值
  236. DECLARE @x XML
  237. SELECT @x = '
  238. <People>
  239. <NAME>dongsheng</NAME>
  240. <SEX>男</SEX>
  241. </People>'
  242. SELECT
  243. @x.value('local-name((/*/*)[2])','VARCHAR(20)') AS ElementName,
  244. @x.value('(/*/*/text())[2]','VARCHAR(20)') AS ElementValue
  245. /*
  246. ElementName ElementValue
  247. -------------------- --------------------
  248. SEX 男
  249. */
  250. --读取根下所有的元素名称和值
  251. DECLARE @x XML
  252. SELECT @x = '
  253. <People>
  254. <NAME>dongsheng</NAME>
  255. <SEX>男</SEX>
  256. </People>'
  257. SELECT
  258. C.value('local-name(.)','VARCHAR(20)') AS ElementName,
  259. C.value('.','VARCHAR(20)') AS ElementValue
  260. FROM @x.nodes('/*/*') T(C)
  261. /*
  262. ElementName ElementValue
  263. -------------------- --------------------
  264. NAME dongsheng
  265. SEX 男
  266. */
  267. ---22.查询元素数量
  268. --如下Peoples根节点下有个People子节点。
  269. DECLARE @x XML
  270. SELECT @x = '
  271. <Peoples>
  272. <People>
  273. <NAME>dongsheng</NAME>
  274. <SEX>男</SEX>
  275. </People>
  276. <People>
  277. <NAME>土豆</NAME>
  278. <SEX>男</SEX>
  279. </People>
  280. <People>
  281. <NAME>choushuigou</NAME>
  282. <SEX>女</SEX>
  283. </People>
  284. </Peoples>
  285. '
  286. SELECT @x.value('count(/Peoples/People)','INT') AS Children
  287. /*
  288. Children
  289. -----------
  290. 3
  291. */
  292. --如下Peoples根节点下第一个子节点People下子节点的数量
  293. SELECT @x.value('count(/Peoples/People[1]/*)','INT') AS Children
  294. /*
  295. Children
  296. -----------
  297. 2
  298. */
  299. --某些时候我们可能不知道根节点和子节点的名称,可以用通配符来代替。
  300. SELECT @x.value('count(/*/*)','INT') AS ChildrenOfRoot,
  301. @x.value('count(/*/*[1]/*)','INT') AS ChildrenOfFirstChildElement
  302. /*
  303. ChildrenOfRoot ChildrenOfFirstChildElement
  304. -------------- ---------------------------
  305. 3 2
  306. */
  307. --23.查询属性的数量
  308. DECLARE @x XML
  309. SELECT @x = '
  310. <Employees dept="IT">
  311. <Employee NAME="dongsheng" SEX="男" QQ="5454545454"/>
  312. <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>
  313. </Employees>'
  314. --查询跟节点的属性数量
  315. SELECT @x.value('count(/Employees/@*)','INT') AS AttributeCountOfRoot
  316. /*
  317. AttributeCountOfRoot
  318. --------------------
  319. 1
  320. */
  321. --第一个Employee节点的属性数量
  322. SELECT @x.value('count(/Employees/Employee[1]/@*)','INT') AS AttributeCountOfFirstElement
  323. /*
  324. AttributeCountOfFirstElement
  325. ----------------------------
  326. 3
  327. */
  328. --第二个Employee节点的属性数量
  329. SELECT @x.value('count(/Employees/Employee[2]/@*)','INT') AS AttributeCountOfSeconfElement
  330. /*
  331. AttributeCountOfSeconfElement
  332. -----------------------------
  333. 4
  334. */
  335. --如果不清楚节点名称可以用*通配符代替
  336. SELECT @x.value('count(/*/@*)','INT') AS AttributeCountOfRoot
  337. ,@x.value('count(/*/*[1]/@*)','INT') AS AttributeCountOfFirstElement
  338. ,@x.value('count(/*/*[2]/@*)','INT') AS AttributeCountOfSeconfElement
  339. /*
  340. AttributeCountOfRoot AttributeCountOfFirstElement AttributeCountOfSeconfElement
  341. -------------------- ---------------------------- -----------------------------
  342. 1 3 4
  343. */
  344. --返回没个节点的属性值
  345. SELECT C.value('count(./@*)','INT') AS AttributeCount
  346. FROM @x.nodes('/*/*') T(C)
  347. /*
  348. AttributeCount
  349. --------------
  350. 3
  351. 4
  352. */
  353. --24.返回给定位置的属性值或者名称
  354. DECLARE @x XML
  355. SELECT @x = '
  356. <Employees dept="IT">
  357. <Employee NAME="dongsheng" SEX="男" QQ="5454545454"/>
  358. <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>
  359. </Employees>'
  360. --返回第一个Employee节点的第一个位置的属性值
  361. SELECT @x.value('(/Employees/Employee[1]/@*[position()=1])[1]','VARCHAR(20)') AS AttValue
  362. /*
  363. AttValue
  364. --------------------
  365. dongsheng
  366. */
  367. --返回第二个Employee节点的第四个位置的属性值
  368. SELECT @x.value('(/Employees/Employee[2]/@*[position()=4])[1]','VARCHAR(20)') AS AttValue
  369. /*
  370. AttValue
  371. --------------------
  372. 13954697895
  373. */
  374. --返回第一个元素的第三个属性值
  375. SELECT @x.value('local-name((/Employees/Employee[1]/@*[position()=3])[1])','VARCHAR(20)') AS AttName
  376. /*
  377. AttName
  378. --------------------
  379. QQ
  380. */
  381. --返回第二个元素的第四个属性值
  382. SELECT @x.value('local-name((/Employees/Employee[2]/@*[position()=4])[1])','VARCHAR(20)') AS AttName
  383. /*
  384. AttName
  385. --------------------
  386. TEL
  387. */
  388. --通过变量传递位置返回属性值
  389. DECLARE @Elepos INT,@Attpos INT
  390. SELECT @Elepos=2,@Attpos = 3
  391. SELECT @x.value('local-name((/Employees/Employee[sql:variable("@Elepos")]/@*[position()=sql:variable("@Attpos")])[1])','VARCHAR(20)') AS AttName
  392. /*
  393. AttName
  394. --------------------
  395. QQ
  396. */
  397. --25.判断是XML中否存在相应的属性
  398. DECLARE @x XML
  399. SELECT @x = '<Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>'
  400. IF @x.exist('/Employee/@NAME') = 1
  401. SELECT 'Exists' AS Result
  402. ELSE
  403. SELECT 'Does not exist' AS Result
  404. /*
  405. Result
  406. ------
  407. Exists
  408. */
  409. --传递变量判断是否存在
  410. DECLARE @x XML
  411. SELECT @x = '<Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>'
  412. DECLARE @att VARCHAR(20)
  413. SELECT @att = 'QQ'
  414. IF @x.exist('/Employee/@*[local-name()=sql:variable("@att")]') = 1
  415. SELECT 'Exists' AS Result
  416. ELSE
  417. SELECT 'Does not exist' AS Result
  418. /*
  419. Result
  420. ------
  421. Exists
  422. */
  423. --26.循环遍历元素的所有属性
  424. DECLARE @x XML
  425. SELECT @x = '<Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>'
  426. DECLARE
  427. @cnt INT,
  428. @totCnt INT,
  429. @attName VARCHAR(30),
  430. @attValue VARCHAR(30)
  431. SELECT
  432. @cnt = 1,
  433. @totCnt = @x.value('count(/Employee/@*)','INT')--获得属性总数量
  434. -- loop
  435. WHILE @cnt <= @totCnt BEGIN
  436. SELECT
  437. @attName = @x.value(
  438. 'local-name((/Employee/@*[position()=sql:variable("@cnt")])[1])',
  439. 'VARCHAR(30)'),
  440. @attValue = @x.value(
  441. '(/Employee/@*[position()=sql:variable("@cnt")])[1]',
  442. 'VARCHAR(30)')
  443. PRINT 'Attribute Position: ' + CAST(@cnt AS VARCHAR)
  444. PRINT 'Attribute Name: ' + @attName
  445. PRINT 'Attribute Value: ' + @attValue
  446. PRINT ''
  447. -- increment the counter variable
  448. SELECT @cnt = @cnt + 1
  449. END
  450. /*
  451. Attribute Position: 1
  452. Attribute Name: NAME
  453. Attribute Value: 土豆
  454. Attribute Position: 2
  455. Attribute Name: SEX
  456. Attribute Value: 女
  457. Attribute Position: 3
  458. Attribute Name: QQ
  459. Attribute Value: 5345454554
  460. Attribute Position: 4
  461. Attribute Name: TEL
  462. Attribute Value: 13954697895
  463. */
  464. --27.返回指定位置的子元素
  465. DECLARE @x XML
  466. SELECT @x = '
  467. <Employees dept="IT">
  468. <Employee NAME="dongsheng" SEX="男" QQ="5454545454"/>
  469. <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>
  470. </Employees>'
  471. SELECT @x.query('(/Employees/Employee)[1]')
  472. /*
  473. <Employee NAME="dongsheng" SEX="男" QQ="5454545454" />
  474. */
  475. SELECT @x.query('(/Employees/Employee)[position()=2]')
  476. /*
  477. <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895" />
  478. */
  479. --通过变量获取指定位置的子元素
  480. DECLARE @i INT
  481. SELECT @i = 2
  482. SELECT @x.query('(/Employees/Employee)[sql:variable("@i")]')
  483. --or
  484. SELECT @x.query('(/Employees/Employee)[position()=sql:variable("@i")]')
  485. /*
  486. <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895" />
  487. */
  488. --28.循环遍历获得所有子元素
  489. DECLARE @x XML
  490. SELECT @x = '
  491. <Employees dept="IT">
  492. <Employee NAME="dongsheng" SEX="男" QQ="5454545454"/>
  493. <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>
  494. </Employees>'
  495. DECLARE
  496. @cnt INT,
  497. @totCnt INT,
  498. @child XML
  499. -- counter variables
  500. SELECT
  501. @cnt = 1,
  502. @totCnt = @x.value('count(/Employees/Employee)','INT')
  503. -- loop
  504. WHILE @cnt <= @totCnt BEGIN
  505. SELECT
  506. @child = @x.query('/Employees/Employee[position()=sql:variable("@cnt")]')
  507. PRINT 'Processing Child Element: ' + CAST(@cnt AS VARCHAR)
  508. PRINT 'Child element: ' + CAST(@child AS VARCHAR(100))
  509. PRINT ''
  510. -- incremet the counter variable
  511. SELECT @cnt = @cnt + 1
  512. END
  513. /*
  514. Processing Child Element: 1
  515. Child element: <Employee NAME="dongsheng" SEX="男" QQ="5454545454"/>
  516. Processing Child Element: 2
  517. Child element: <Employee NAME="土豆" SEX="女" QQ="5345454554" TEL="13954697895"/>

SQL Server 中对XML数据的五种基本操作

1.xml.exist
   输入为XQuery表达式,返回0,1或是Null。0表示不存在,1表示存在,Null表示输入为空
2.xml.value
   输入为XQuery表达式,返回一个SQL Server标量值
3.xml.query
   输入为XQuery表达式,返回一个SQL Server XML类型流
4.xml.nodes
   输入为XQuery表达式,返回一个XML格式文档的一列行集
5.xml.modify

使用XQuery表达式对XML的节点进行insert , update 和 delete 操作。

下面通过例子对上面的五种操作进行说明:

  1. declare @XMLVar xml = '
  2. <catalog>
  3. <book category="ITPro">
  4. <title>Windows Step By Step</title>
  5. <author>Bill Zack</author>
  6. <price>49.99</price>
  7. </book>
  8. <book category="Developer">
  9. <title>Developing ADO .NET</title>
  10. <author>Andrew Brust</author>
  11. <price>39.93</price>
  12. </book>
  13. <book category="ITPro">
  14. <title>Windows Cluster Server</title>
  15. <author>Stephen Forte</author>
  16. <price>59.99</price>
  17. </book>
  18. </catalog>'

1. xml.exist

  1. select @XMLVar.exist('/catalog/book')-----返回1
  2. select @XMLVar.exist('/catalog/book/@category')-----返回1
  3. select @XMLVar.exist('/catalog/book1')-----返回0
  4. set @XMLVar = null
  5. select @XMLVar.exist('/catalog/book')-----返回null

2.xml.value

  1. select @XMLVar.value('/catalog[1]/book[1]','varchar(MAX)')
  2. select @XMLVar.value('/catalog[1]/book[2]/@category','varchar(MAX)')
  3. select @XMLVar.value('/catalog[2]/book[1]','varchar(MAX)')

结果集为:
Windows Step By StepBill Zack49.99   Developer   NULL
3.xml.query

  1. select @XMLVar.query('/catalog[1]/book')
  2. select @XMLVar.query('/catalog[1]/book[1]')
  3. select @XMLVar.query('/catalog[1]/book[2]/author')

结果集分别为:

  1. <book category="ITPro">
  2. <title>Windows Step By Step</title>
  3. <author>Bill Zack</author>
  4. <price>49.99</price>
  5. </book>
  6. <book category="Developer">
  7. <title>Developing ADO .NET</title>
  8. <author>Andrew Brust</author>
  9. <price>39.93</price>
  10. </book>
  11. <book category="ITPro">
  12. <title>Windows Cluster Server</title>
  13. <author>Stephen Forte</author>
  14. <price>59.99</price>
  15. </book>
  16. <book category="ITPro">
  17. <title>Windows Step By Step</title>
  18. <author>Bill Zack</author>
  19. <price>49.99</price>
  20. </book>
  21. <author>Andrew Brust</author>

4.xml.nodes

  1. select T.c.query('.') as result from @XMLVar.nodes('/catalog/book') as T(c)
  2. select T.c.query('title') as result from @XMLVar.nodes('/catalog/book') as T(c)

结果集分别为:

  1. <book category="ITPro"><title>Windows Step By Step</title><author>Bill …………
  2. <book category="Developer"><title>Developing ADO .NET</title><author>Andrew …………
  3. <book category="ITPro"><title>Windows Cluster Server</title><author>Stephen …………
  4. <title>Windows Step By Step</title>
  5. <title>Developing ADO .NET</title>
  6. <title>Windows Cluster Server</title>
  1. set ARITHABORT on
  2. DECLARE @x XML
  3. SELECT @x = '<Peoples>
  4. <People>
  5. <Email>1dongsheng@xxyy.com</Email>
  6. <Phone>678945546</Phone>
  7. <QQ>36575</QQ>
  8. <Addr>36575</Addr>
  9. </People>
  10. </Peoples>'
  11. -- 方法1
  12. select 1001 as peopleId, p.* FROM(
  13. SELECT
  14. C.value('local-name(.)','VARCHAR(20)') AS attrName,
  15. C.value('.','VARCHAR(20)') AS attrValue
  16. FROM @x.nodes('/*/*/*') T(C) --第三层
  17. ) as p
  18. /*
  19. 1001 Email 1dongsheng@xxyy.com
  20. 1001 Phone 678945546
  21. 1001 QQ 36575
  22. 1001 Addr 36575
  23. */
  1. /*
  2. 解析XML存储过程
  3. */
  4. ALTER PROCEDURE [dbo].[sp_ExportXml]
  5. @x xml ,
  6. @layerstr nvarchar(max)
  7. AS
  8. DECLARE @sql nvarchar(max)
  9. BEGIN
  10. set arithabort on
  11. set @sql='select p.* FROM(
  12. SELECT
  13. C.value(''local-name(.)'',''VARCHAR(20)'') AS attrName,
  14. C.value(''.'',''VARCHAR(20)'') AS attrValue
  15. FROM @xmlParas.nodes('''+@layerstr+''') T(C)
  16. ) as p'
  17. --print @sql
  18. EXECUTE sp_executesql @sql, N'@xmlParas as xml',@xmlParas=@x
  19. END
  1. DECLARE @x XML
  2. SELECT @x =
  3. '<Peoples>
  4. <People>
  5. <Email>1dongsheng@xxyy.com</Email>
  6. <Phone>678945546</Phone>
  7. <QQ>36575</QQ>
  8. <Addr>36575</Addr>
  9. </People>
  10. </Peoples>'
  11. EXECUTE sp_ExportXml @x,'/*/*/*'

希望本文所述对大家SQL Server数据库程序设计有所帮助。

您可能感兴趣的文章:

  • 往xml中更新节点的实例代码
  • js操作XML文件的实现方法兼容IE与FireFox
  • Java全面解析XML格式串(JDOM解析)
  • Android解析XML的三种方式SAX、Pull、Dom
  • js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
  • 两种方法解决javascript url post 特殊字符转义 + & #
  • Python连接MySQL并使用fetchall()方法过滤特殊字符
  • 基于javascript如何传递特殊字符
  • xml 的特殊字符的处理方法

人气教程排行