--两种方式查询
DECLARE @varXML XML,
@varXML1 XML,
@varXML2  XML --、xml数据源为属性方式
SET @varXML = '<PARAM>
<Row FID = "" FName = "张三" />
<Row FID = "" FName = "李四" />
<Row FID = "" FName = "王五" />
</PARAM>' Select T.C.value('@FID','INT') AS FID,
T.C.value('@FName','VARCHAR(20)') AS FName
From @varXML.nodes('/PARAM/Row') T(C)
--、xml数据源为标签方式
SET @varXML1 = '<PARAM>
<Row><FID></FID><FName>张三</FName></Row>
<Row><FID></FID><FName>李四</FName></Row>
<Row><FID></FID><FName>王五</FName></Row>
</PARAM>' Select T.C.value('(FID)[1]','INT') AS FID,
T.C.value('(FName)[1]','VARCHAR(20)') AS FName
From @varXML1.nodes('/PARAM/Row') T(C)

--3、xml数据源为属性方式(多级嵌套)
SET @varXML2 = '<root>
                  <hosptail hospCode = "1" hospName = "测试医院" >
                    <dept deptCode = "2" deptName = "内科" >
                      <doctor docCode = "3" docName = "王五" ></doctor>
                    </dept>
                  </hosptail>
                </root>'

Select T.C.value('(/root/hosptail/@hospCode)[1]','INT') AS FID,
       T.C.value('(/root/hosptail/@hospName)[1]','VARCHAR(20)') AS FName,
       T.C.value('(/root/hosptail/dept/@deptCode)[1]','INT') AS FID,
       T.C.value('(/root/hosptail/dept/@deptName)[1]','VARCHAR(20)') AS FName,
       T.C.value('(/root/hosptail/dept/doctor/@docCode)[1]','INT') AS FID,
       T.C.value('(/root/hosptail/dept/doctor/@docName)[1]','VARCHAR(20)') AS FName
From   @varXML2.nodes('/root') T(C)

应用场景:对外提供的WebService,别人访问接口后,传入XML参数,直接将XML当做存储过程的参数,在存储过程中查询、游标等解析处理。

当入参同一个参数 有多个时,

--入参中 同一个参数有多个的情况,如下<detailId>LYTSA0000942|</detailId> <detailId>LYTSA0000942|</detailId>

declare @xmlStr XML 

set @xmlStr = '<root><medicalCardNumber>001000030044374</medicalCardNumber><outTradeNo>ZJZF_DZSYCSFYBJY_10391149</outTradeNo><amount>0.00</amount>
<payTime>-- ::</payTime><payType>WeChatPay</payType><balancePayment>0.07</balancePayment><hospitalId>0534_0115</hospitalId>
<detailId>LYTSA0000942|</detailId><detailId>LYTSA0000942|</detailId>
</root>' --通过指定(detailId)[] 或 (detailId)[] 来确定取哪个 参数
Select T.C.value('(medicalCardNumber)[1]','varchar(1024)') AS FID,
T.C.value('(outTradeNo)[1]','VARCHAR(1024)') AS FName,
T.C.value('(detailId)[1]','varchar(1024)') AS detailId1,
T.C.value('(detailId)[2]','varchar(1024)') AS detailId2
From @xmlStr.nodes('/root') T(C)

Sql语句查询XML - 小结的更多相关文章

  1. 如何用SQL语句查询Excel数据?

    如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...

  2. sql语句查询

    1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...

  3. phpcmsv9自定义sql语句查询模型实现

    在phpcmsv9中,自定义sql语句查询可不太好实现,传入sql语句查询很容易被内部转入生成一系列莫名其妙的sql语句,比如最佳前缀等等,直接造成sql语句查询错误,在此也提供两种解决办法,1修改底 ...

  4. 怎样用SQL语句查询一个数据库中的所有表?

    怎样用SQL语句查询一个数据库中的所有表?  --读取库中的所有表名 select name from sysobjects where xtype='u'--读取指定表的所有列名select nam ...

  5. SQL语句查询某表的所有字段及数据类型

    SQL语句查询某表的所有字段及数据类型 SELECT name AS column_name , TYPE_NAME(system_type_id) AS column_type , max_leng ...

  6. sql语句查询数据库表结构信息

    开发中经常用到查询指定表及其字段的信息,以下是我整理的SQL语句查询方法,供自己平时使用也提供给大家参考! 1.适用MS SQL SERVER: SELECT 表名 = then d.name els ...

  7. 怎么用sql语句查询一个数据库有多少张表

    今天在技术群中闲谈时忽然聊到一个问题,那就是当一个数据库中有多张表时怎么快速的获取到表的个数,从而给问询者一个准确的回答. 大家或许会说,这个问题和我们的数据库操作没有太大关系或者不是很挂钩,所以没意 ...

  8. 使用sql语句查询日期在一定时间内的数据

    使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0   //查询当天日期在一周年 ...

  9. SQL语句查询数据库的触发器、存储过程、视图以及表的SQL语句

    Sql Server数据库用SQL语句查询方法如下: select name from sysobjects where xtype='TR' --所有触发器 select name from sys ...

随机推荐

  1. [CF235E]Number Challenge

    $\newcommand{fl}[1]{\left\lfloor#1\right\rfloor}$题意:求$\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\lim ...

  2. 【暴力】vijos P1897 学姐吃牛排

    判断堆:递归判断每个节点的孩子是否都比其父亲大(小). 判断BST:中序遍历是否有序. #include<cstdio> using namespace std; #define lc ( ...

  3. 【费马小定理+快速幂+逆元】BZOJ3240-[NOI2013]矩阵游戏

    [题目大意] 若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式:F[1][1]=1F[i,j]=a*F[i][j-1]+b (j!=1)①F[i,1]=c*F[i-1 ...

  4. XCode编译速度慢的解决方案

    提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...

  5. Android Studio生成APK自动追加版本号、自定义apk名称、指定签名证书文件

    你也可以查看我的其他同类文章,也会让你有一定的收货! 生成APK自动追加版本号 可自动区分debug和release,并追加版本号: 打开 build.gradle 在 android 节点中插入下面 ...

  6. linux下目录大小为什么是4K?一个目录下最多有个多少个子目录?最多有多少个文件?ls -l显示的内容中total到底是什么?

    子目录数太多,会影响搜索性能. 在同一个路径下,一级子目录的个数限制为31998,如果你的应用生成的目录可能会超过这个数,那要注意进行目录分级.例如,如果目录名为数字的话,可以将数字除以10000后的 ...

  7. ElasticSearch 数据类型

    1.范围数据类型 支持以下范围类型: integer_range : 一系列带符号的32位整数,最小值为,最大值为 float_range:一系列单精度32位IEEE 754浮点值. long_ran ...

  8. IOS研究之多个UITextField的键盘处理

    在IOS开发中使用UITextField时常须要考虑的问题就是键盘的处理. 有时候,弹出的键盘会将UITextField区域覆盖,影响用户输入.这个时候就要将视图上移.这个时候我们须要考虑两点: 1, ...

  9. Java笔记3:Eclipse添加jar包

    本文以jedis包为例,演示Eclipse如何添加和使用jar包.   1 建立一个名为ImportJarDemo的JavaProject.在该工程下建立一个libs的文件夹. 2 将下载的jedis ...

  10. Yii2系列教程四:实现用户注册,验证,登录

    上一篇写了一点点Yii2的数据库相关知识和强大的Gii,这一篇就如上一篇的最后所说的一样:在Yii2中实现用户的注册和登录. 你可以直接到Github下载源码,以便可以跟上进度,你也可以重头开始,一步 ...