在SQL2008中使用XML应对不确定结构的参数

目的:统一接口,当数据结构发生变化时,前后端业务接口不发生变化,由业务具体解析结构。

规则:确定的接口用参数表(多行提交),不确定的参数用XML

?

  1. DECLARE @r TABLE
  2. ????(
  3. ??????HardwareNo INT ,
  4. ??????emvno INT ,
  5. ??????DATA XML
  6. ????)
  7. INSERT
    INTO @r
  8. VALUES ( 1, 1,
  9. ??????????‘<d><k>meter</k><v>1</v></d><d><k>run</k><v>100</v></d><d><k>work</k><v>80</v></d><d><k>dead</k><v>20</v></d>‘ ),
  10. ????????( 2, 1,
  11. ??????????‘<d><k>meter</k><v>21</v></d><d><k>run</k><v>100</v></d><d><k>work</k><v>80</v></d><d><k>dead</k><v>20</v></d>‘ ),
  12. ????????( 3, 1,
  13. ??????????‘<d><k>meter</k><v>31</v></d><d><k>run</k><v>100</v></d><d><k>work</k><v>80</v></d><d><k>dead</k><v>20</v></d><d><k>good</k><v>210</v></d>‘ )
  14. ?
  15. ?
  16. SELECT *
  17. FROM @r
  18. ?
  19. ?
  20. DECLARE @xml XML
  21. SELECT @xml = data
  22. FROM @r
  23. SELECT T.c.value(‘k[1]‘, ‘varchar(20)‘) k ,
  24. ????????T.c.value(‘v[1]‘, ‘varchar(20)‘) v
  25. FROM @xml.nodes(‘/d‘) T ( c )
  26. ?
  27. ?
  28. ?
  29. SELECT HardwareNo ,
  30. ????????T.c.value(‘k[1]‘, ‘varchar(20)‘) k ,
  31. ????????T.c.value(‘v[1]‘, ‘varchar(20)‘) v
  32. FROM @r
  33. ????????CROSS APPLY data.nodes(‘/d‘) AS T ( c )

?

输出结果:

?

  1. (3 行受影响)
  2. HardwareNo emvno DATA
  3. 1 1 <d><k>meter</k><v>1</v></d><d><k>run</k><v>100</v></d><d><k>work</k><v>80</v></d><d><k>dead</k><v>20</v></d>
  4. 2 1 <d><k>meter</k><v>21</v></d><d><k>run</k><v>100</v></d><d><k>work</k><v>80</v></d><d><k>dead</k><v>20</v></d>
  5. 3 1 <d><k>meter</k><v>31</v></d><d><k>run</k><v>100</v></d><d><k>work</k><v>80</v></d><d><k>dead</k><v>20</v></d><d><k>good</k><v>210</v></d>
  6. ?
  7. (3 行受影响)
  8. ?
  9. k v
  10. -------------------- --------------------
  11. meter 31
  12. run 100
  13. work 80
  14. dead 20
  15. good 210
  16. ?
  17. (5 行受影响)
  18. ?
  19. HardwareNo k v
  20. ----------- -------------------- --------------------
  21. 1 meter 1
  22. 1 run 100
  23. 1 work 80
  24. 1 dead 20
  25. 2 meter 21
  26. 2 run 100
  27. 2 work 80
  28. 2 dead 20
  29. 3 meter 31
  30. 3 run 100
  31. 3 work 80
  32. 3 dead 20
  33. 3 good 210
  34. ?
  35. (13 行受影响)

?

?

?

?

?

?

时间: 2024-10-25 03:33:13

在SQL2008中使用XML应对不确定结构的参数的相关文章

C#中使用XML指南之读取XML

? C#中使用XML指南之读取XML ? 访问的两种模型: ? 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题.流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文

Ajax提高篇(4)在请求和响应中使用 XML(2)

----前言 在 Ajax 应用程序中,使用 XML 作为发送数据的格式的理由很少,但使服务器向 客户机回发 XML 的理由很多. 理由:(1)客户机以名称/值对发送请求(2)服务器无法(以一种标准方式)发送名称/值对 在大多数情况下,客户机不需要使用 XML,因为他们会使用名称/值对发送请求.因此,您可能会发送一个这样的名称:name=jennifer.只需简单地在连续的名称/值对之间添加一个 "与" 符号(&),即可将其放在一起,就像这样:name=jennifer&

Java中解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

MyEclipse中strust.xml代码自动提示

1.首先打开MyEclipse的窗口,选择“Window”菜单下的“Preferences”选项,如图所示 2.在打开的“Preferences”界面中搜索“xml”,选择“XML Catalog”选项,然后选择右边的“Add...”按钮 3.在打开的对话框中,在“location”中输入struts.xml文件所对应的dtd文件的所在位置,最好不要选择有中文的目录,有时候正是因为选择了中文目录,所以没有出现提示. 选择“File System”按钮,找到dtd文件的位置,“E:\struts-

解决struts2中validation.xml配置无效的问题

解决struts2中validation.xml配置无效的问题,我使用了xml的验证,却始终发现无法生效,后面发现才是xml的头文件的格式问题,修改了一下就好了. 成功的xml <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <val

maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

C#.Net中操作XML方法一

我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XML文件里,以下就说一下怎样在C#中操作XML文件. 经常使用类 XmlDocument:XML的文档.就好比一棵树. XmlNode:XML中的结点类,就好比树枝. XmlElement:XML中元素,就好比树枝上的叶子. 既然我们已经了解这几个经常使用类的,那么让你画一棵树是不是非常easy呢?

8在JSP中使用XML

XML是万维联盟定义的一种语言,是表示结构化数据的行业标准.XML不仅提供了直接在数据上工作的通用方法,而且XML的威力在于将用户界面和结构化数据相分离.XML文件就是按照XML语言编写的文本文件. XML解析器是XML和应用程序之间的一个软件组织,其目的是为应用程序从XML文件中解析出所需要的数据.现在普遍使用的XML解析器都是Java语言编写的. 1XML文件的基本结构 XML是extensible Markup Lanuage缩写,称之为可扩展标识语言.所谓可扩展性是指XML允许用户按照X

delphi中的XML解析控件TXMLDocument的用法

Delphi中TXMLDocument控件的用法 Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xmlversion="1.0"encoding="gb2312"?><!--文档版本信息,注释格式同HTML--> 2<XMLPackage> 3<clinetinfoip=”202.1