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 ...
随机推荐
- 小议map排序问题
map有序无序?如果说有序, 这个顺序是怎么定义的? 安装put的先后顺序吗? 还是被put元素的内容呢? 经观察,应该是后者,跟put先后顺序无关, 跟内部实现有关(可能是hash排序的, 非大小排 ...
- NSString NSUrl 相互转化
//NSString 转为 NSURL NSString *webStr = @"www.baidu.com"; NSURL *webUrl = [NSURL URLWithStr ...
- mongodb数据类型
随着web2.0的时代到来,关系型数据库在越来越多的场景下暴漏出许多问题,为了解决这类问题,NoSql数据库应用而生,今天就来说说当下比较主流的NoSql数据库mongodb. 1. 基本数据类型 ...
- fir.im Weekly - iOS 保持界面流畅的技巧
生命不息,coding 不止.本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码分享,产品 UI 设计的好文章,还有一些程序员成长的 Tips,希望 ...
- js 优化
一.for循环的优化 <!doctype html> <html lang="en"> <head> <meta charset=&quo ...
- HTTP学习补充一
1 HTTP协议协商 1.1 NPN NPN:Next Protocol Negotiation,是由Google公司开发的用于SPDY进行协议协商扩展. 协商过程: 服务端在收到客户端的client ...
- 【WP8.1开发】认识后台任务
在手机上,使用后台,不像电脑上那么随意,准确地讲嘛,在移动平台上,后台任务都有严格的限制.至于说为什么会有这么多限制,我估计初衷很明显——保证系统的性能不受某个或某几个应用的负面影响:另外就是出于安全 ...
- WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单M ...
- poj3342Party at Hali-Bula(树形dp)
/* 树形dp! 判重思路: 当dp[v][0]==dp[v][1]时,很自然,flag[u][0]必然是有两种方案的.flag[u][1]则不然, 因为它只和dp[v][0]有关系.而若flag[v ...
- tomcat本地部署war包的方式
最近学习java,在本地tomcat部署时,主要采取以下方式: 一.本地构建生成war包 在本地项目中的terminal下,使用命令 “mvn clean install”或 先执行“mvn clea ...