SQL Server XML转Table
前言
在SQL Server中有时候我们需要传人一个Table过去,然后可以在存储过程中批量更新,批量的获取相应数据。
但存储过程的参数是固定,所以这里我们可以变通的传人xml类型的参数,然后在存储过程中直接将其转换成我们需要的Table
具体实现
SQL Sever中已经支持XML类型的参数了,这里我们可以用OPENXML 方法来解析xml参数,OPENXML的MSDN。
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
以上可以看到OPENXML是三个参数:
第一个一般是通过存储过程sp_xml_preparedocument获取的。
第二个参数就是xpath
第三个参数标识符,1表示获取的是xml的属性,2表示获取xml的子节点。
下面我们demo一下flag为2的:
DECLARE @XML NVARCHAR(MAX);
SET @XML = '<airs>
<air>
<Dep>SYX</Dep>
<Arr>ZUH</Arr>
<AirCode>3U</AirCode>
<FlightNo>3U8432</FlightNo>
<Cabin>X</Cabin>
<DepDate>2016-07-06</DepDate>
</air>
<air>
<Dep>CGQ</Dep>
<Arr>CKG</Arr>
<AirCode>3U</AirCode>
<FlightNo>3U8864</FlightNo>
<Cabin>Y</Cabin>
<DepDate>2016-07-15</DepDate>
</air>
</airs>'; DECLARE @handle INT;
DECLARE @PrepareXmlStatus INT; EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML; SELECT *
FROM OPENXML(@handle, '/airs/air', 2)
WITH (
Dep NVARCHAR(20),
Arr NVARCHAR(20),
AirCode NVARCHAR(20),
FlightNo NVARCHAR(20),
Cabin NVARCHAR(20),
DepDate DATE
); EXEC sp_xml_removedocument @handle;
其最终的结果:
Dep Arr AirCode FlightNo Cabin DepDate
-------------------- -------------------- -------------------- -------------------- -------------------- ----------
SYX ZUH 3U 3U8432 X 2016-07-06
CGQ CKG 3U 3U8864 Y 2016-07-15
获取属性的demo如下:
DECLARE @XML XML;
SET @XML = '<airs>
<air Dep="SYX" Arr="ZUH" AirCode="3U" FlightNo="3U8432" Cabin="X" DepDate="2016-07-06" PrintPrice="1000"></air>
<air Dep="CGQ" Arr="CKG" AirCode="3U" FlightNo="3U8864" Cabin="Y" DepDate="2016-07-15" PrintPrice="1500"></air>
</airs>'; DECLARE @handle INT;
DECLARE @PrepareXmlStatus INT; EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML; SELECT *
FROM OPENXML(@handle, '/airs/air', 1)
WITH (
Dep NVARCHAR(20),
Arr NVARCHAR(20),
AirCode NVARCHAR(20),
FlightNo NVARCHAR(20),
Cabin NVARCHAR(20),
DepDate DATE,
PrintPrice DECIMAL(18,2)
); EXEC sp_xml_removedocument @handle;
结果如下:
Dep Arr AirCode FlightNo Cabin DepDate PrintPrice
-------------------- -------------------- -------------------- -------------------- -------------------- ---------- ---------------------------------------
SYX ZUH 3U 3U8432 X 2016-07-06 1000.00
CGQ CKG 3U 3U8864 Y 2016-07-15 1500.00
总结
用OPENXML可以将xml转换为需要的TABLE,而且OPENXML的参数只有三个,大家多跑几次demo就可以了解了。
SQL Server XML转Table的更多相关文章
- SQL SERVER XML 学习总结
SQL SERVER XML 学习总结 最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql s ...
- Sql Server xml 类型字段的增删改查
1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...
- 转载---SQL Server XML基础学习之<5>--XQuery(query)
本章写一些SQL Server XML的一些XQuery基础语法,主要讲的query查询语法 T-SQL 支持用于查询 XML 数据类型的 XQuery 语言的子集. XQuery 基于现有的 XPa ...
- SQL Server XML数据解析
--5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <In ...
- SQL Server XML 查询
[参考1] 18个小实例入门SQLServer XML查询 [参考2] 转载---SQL Server XML基础学习之<5>--XQuery(query)
- SQL Convert XML to Table
将xml nodes 属性中的值 转为table 形式 declare @xml2 xml set @xml2 = '<CMADatas> <CMAData CmaName=&quo ...
- (轉載)sql server xml字段的操作
原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 另外可參考:https://msdn.microsoft.com/en-us/li ...
- SQL Server ->> XML方法
1. 得到XML类型中某个节点下子节点的数量 DECLARE @xml xml SET @xml = ' <Parameters> <Parameter name = "p ...
- sql server or Oracle: table MS_Description
--SQL Server表描述 及 字段描述的增.删.改.查询 --sql server 2000系统表sysproperties在SQL 2008中无效的问题 今天无意中在网上发现Sqlserver ...
随机推荐
- table下属标签与标签中间不能加其他任何标签
今天设计网页,很想在table下面的caption下面加hr标签,不能正常解析,后来发现hr标签可以显示,但是用浏览器查看解析,发现hr在table上面进行了解析,不会再caption下面显示, 又连 ...
- 在Windows下安装Memcached
Windows下的Memcache安装: 需要运行命令行工具cmd 请以管理员权限运行 开始->附件->命令提示符,以管理员身份运行 假如当前C:\windows\system32,输入c ...
- salesforce 零基础学习(三十八)Translate 的使用(国际化处理)
本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workbench_cheatsheet.pdf ...
- YaHoo 前端优化军规
1.Minimize HTTP Requests 减少HTTP请求 图片.css.script.flash等等这些都会增加http请求数,减少这些元素的数量就能减少响应时间.把多个JS.CSS在可能的 ...
- Android 代码混淆之部分类不混淆的技巧
在编写Android程序之后,我们通常要代码进行混淆编码,这样才能保证市场上我们的应用不会被别人进行反编译,然后破解,所以此时需要在发布正式版本的时候,有一些类事不能混淆的,比如实现了 Seriali ...
- struts之动态方法调用使用通配符
一.DMI动态方法调用的其中一种改变form表单中action属性的方式已经讲过了.还有两种,一种是改变struts.xml配置文件中action标签中的method属性,来指定执行不同的方法处理不同 ...
- WPF combobox
先写一个数据类Grade.cs using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- java中finally和return的执行顺序
注意:return的位置... 从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中 有re ...
- 05-Vue入门系列之Vue实例详解与生命周期
Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...
- 深入了解ibatis源码----简单ibatis示例代码
搭建源码环境: 1.创建sql数据库. CREATE TABLE USER_ACCOUNT ( USERID INT(3) NOT NULL AUTO_INCREMENT, USERNAME VARC ...