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. --查询deptIT的人员信息
  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部门typePermanent的员工
  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"/>
  1. SQL Server 中对XML数据的五种基本操作
  2. 1.xml.exist
  3. 输入为XQuery表达式,返回01或是Null0表示不存在,1表示存在,Null表示输入为空
  4. 2.xml.value
  5. 输入为XQuery表达式,返回一个SQL Server标量值
  6. 3.xml.query
  7. 输入为XQuery表达式,返回一个SQL Server XML类型流
  8. 4.xml.nodes
  9. 输入为XQuery表达式,返回一个XML格式文档的一列行集
  10. 5.xml.modify
  11. 使用XQuery表达式对XML的节点进行insert , update delete 操作。
  12. 下面通过例子对上面的五种操作进行说明:
  13. declare @XMLVar xml = '
  14. <catalog>
  15. <book category="ITPro">
  16. <title>Windows Step By Step</title>
  17. <author>Bill Zack</author>
  18. <price>49.99</price>
  19. </book>
  20. <book category="Developer">
  21. <title>Developing ADO .NET</title>
  22. <author>Andrew Brust</author>
  23. <price>39.93</price>
  24. </book>
  25. <book category="ITPro">
  26. <title>Windows Cluster Server</title>
  27. <author>Stephen Forte</author>
  28. <price>59.99</price>
  29. </book>
  30. </catalog>'
  31. 1. xml.exist
  32. select @XMLVar.exist('/catalog/book')-----返回1
  33. select @XMLVar.exist('/catalog/book/@category')-----返回1
  34. select @XMLVar.exist('/catalog/book1')-----返回0
  35. set @XMLVar = null
  36. select @XMLVar.exist('/catalog/book')-----返回null
  37. 2.xml.value
  38. select @XMLVar.value('/catalog[1]/book[1]','varchar(MAX)')
  39. select @XMLVar.value('/catalog[1]/book[2]/@category','varchar(MAX)')
  40. select @XMLVar.value('/catalog[2]/book[1]','varchar(MAX)')
  41. 结果集为:
  42. Windows Step By StepBill Zack49.99 Developer NULL
  43. 3.xml.query
  44. select @XMLVar.query('/catalog[1]/book')
  45. select @XMLVar.query('/catalog[1]/book[1]')
  46. select @XMLVar.query('/catalog[1]/book[2]/author')
  47. 结果集分别为:
  48. <book category="ITPro">
  49. <title>Windows Step By Step</title>
  50. <author>Bill Zack</author>
  51. <price>49.99</price>
  52. </book>
  53. <book category="Developer">
  54. <title>Developing ADO .NET</title>
  55. <author>Andrew Brust</author>
  56. <price>39.93</price>
  57. </book>
  58. <book category="ITPro">
  59. <title>Windows Cluster Server</title>
  60. <author>Stephen Forte</author>
  61. <price>59.99</price>
  62. </book>
  63. <book category="ITPro">
  64. <title>Windows Step By Step</title>
  65. <author>Bill Zack</author>
  66. <price>49.99</price>
  67. </book>
  68. <author>Andrew Brust</author>
  69. 4.xml.nodes
  70. select T.c.query('.') as result from @XMLVar.nodes('/catalog/book') as T(c)
  71. select T.c.query('title') as result from @XMLVar.nodes('/catalog/book') as T(c)
  72. 结果集分别为:
  73. <book category="ITPro"><title>Windows Step By Step</title><author>Bill …………
  74. <book category="Developer"><title>Developing ADO .NET</title><author>Andrew …………
  75. <book category="ITPro"><title>Windows Cluster Server</title><author>Stephen …………
  76. <title>Windows Step By Step</title>
  77. <title>Developing ADO .NET</title>
  78. <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. /*
  20. 1001 Email 1dongsheng@xxyy.com
  21. 1001 Phone 678945546
  22. 1001 QQ 36575
  23. 1001 Addr 36575
  24. */
  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,'/*/*/*'
  12.  
  13. /*
  14. Email 1dongsheng@xxyy.com
  15. Phone 678945546
  16. QQ 36575
  17. Addr 36575
  18. */

SQL Server XML数据解析的更多相关文章

  1. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  2. SQL Server 将数据导出为XML和Json

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQ ...

  3. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

  4. Sql Server xml 类型字段的增删改查

    1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...

  5. SQL Server 内存数据库原理解析

    前言 关系型数据库发展至今,细节上以做足文章,在寻求自身突破发展的过程中,内存与分布式数据库是当下最流行的主题,这与性能及扩展性在大数据时代的需求交相辉映.SQL Server作为传统的数据库也在最新 ...

  6. SQL SERVER XML 学习总结

    SQL  SERVER  XML  学习总结 最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql s ...

  7. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

  8. 《转》SQL Server 2008 数据维护实务

    SQL Server 2008 数据维护实务 http://blog.csdn.net/os005/article/details/7739553 http://www.cnblogs.com/xun ...

  9. c#直接调用ssis包实现Sql Server的数据导入功能

    调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...

随机推荐

  1. 使用imageLoader加载图片资源

  2. (1)ES6中let,const,对象冻结,跨模块常量,新增的全局对象介绍

    1.let声明变量,var声明变量,而const声明的常量 2.let与var的区别 let可以让变量长期驻扎在内存当作 let的作用域是分块[ {快1  {快2 }  }每个大括号表示一个独立的块 ...

  3. 团队作业8----第二次项目冲刺(Beta阶段) 第三天

    BETA阶段冲刺第三天 1.小会议ing 2.每个人的工作 (1) 昨天已完成的工作 注册账号时时添加了账号相同不能添加的功能,以防两个账号一样的情况: 老师账号注册时添加一个密令: (2) 今天计划 ...

  4. Quartz入门指南

    Quartz入门指南 看到官网的教程对于新手来说不够全面和连贯,因此结合自己的使用过程写下这个入门指南,用以解惑.本文基于Quartz2.2.2版本.请注意,本文为了易于上手,省略了许多重要的概念,建 ...

  5. 201521123017 《Java程序设计》第3周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  6. 201521123108《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  7. 201521123036 《Java程序设计》第9周学习总结

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 书面作业 本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中 ...

  8. java第十一次作业

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synch ...

  9. 201521123074 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  10. MySQL集群(一)之主从复制

    前面学完了JDBC,接下来带大家感受一下MySQL集群!其实什么是MySQL集群?简单的说就是一群机器(服务器)的集合,它们连在一起来工作. 其实各种数据库都有自己的集群,常常的多: 我们要学习的就是 ...