他可以将XML数据进行读取,SQLServer脚本如下

使用OPENXML可以对XML数据执行JOINs操作而无需首先导入数据,OPENXML是一个rowset函数,下面的代码就是使用sp,他可以将XML数据进行读取,这个阶段遇到的第二个问题是导入的xml文件过大,server默认的配置是导入的xml文件有2M限制,–DECLARE @xml varchar(1024) –SET @xml=’ –&lt,’ –DECLARE @hdoc int –EXEC,SQLServer数据库提取XML文件内容,XML文件内容如下

OPENXML是一个rowset函数,它的劳作措施接近于rowset函数OPENQUE奥德赛Y和OPENROWSET。使用OPENXML能够对XML数据推行JOINs操作而无需首早先入数据。你还足以将其同INSERT、SELECT、UPDATE以至DELETE等操香港作家联谊会面使用。

不时会在存款和储蓄进度中拍卖部分XML格式的多少,所以会用到sp_xml_preparedocument,他得以将XML数据开展读取,然后使用
MSXML 分析器 (Msxmlsql.dll卡塔尔对其進展剖析。大家就能够相当轻松的在存款和储蓄进程中获取XML中我们想要的多寡。上面包车型客车代码就是选拔sp_xml_preparedocument读取XML:复制代码 代码如下: DECLARE @hdoc int DECLARE
@doc varchar(1000卡塔尔 SET @doc =’ ROOT Customer CustomerID=”VINET”
ContactName=”Paul Henriot” Order CustomerID=”VINET” EmployeeID=”5″
OrderDate=”一九九九-07-04T00:00:00″ OrderDetail OrderID=”10248″
ProductID=”11″ Quantity=”12″/ OrderDetail OrderID=”10248″ ProductID=”42″
Quantity=”10″/ /Order /Customer Customer CustomerID=”LILAS”
ContactName=”Carlos Gonzlez” Order CustomerID=”LILAS” EmployeeID=”3″
OrderDate=”1996-08-16T00:00:00″ OrderDetail OrderID=”10283″
ProductID=”72″ Quantity=”3″/ /Order /Customer /ROOT’ EXEC
sp_xml_preparedocument @hdoc OUTPUT, @doc
上边只是读取了XML,要想获得XML数据还索要利用OPENXML,代码如下: 复制代码 代码如下: SELECT * FROM
openxml(@hdoc,’/ROOT/Customer’,1State of Qatar WITH (CustomerID
VARCHARAV4(40卡塔尔国,ContactName VARCHA陆风X8(40卡塔尔卡塔尔国 OPENXML有八个参数:
第叁个是sp_xml_preparedocument读取是的OUTPUT参数,在本示例中就是@hdoc;
第贰个是二个XPath表明式,用来得到钦点地方的数量;
第八个是三个可选择,用来代表收获的章程,有0,1,2,8各个取值,详细分解请看
FROM前边的WITH也是可选的,用来钦命获取哪些数据字段,上边代码中只取了CustomerID和ContactName。下边包车型地铁询问结果如下:
CustomerID ContactName —————————————- —————————————- VINET Paul Henriot
LILAS Carlos Gonzlez
假诺不钦赐WITH子句,查询出来的是二个私下认可的表构造,如下:

1.Download StackExchange’s open data
https://archive.org/details/stackexchange

–DECLARE @xml varchar(1024) –SET @xml=’ –<root> — <code
id=”030001″> —  <point id=”01″ /> —  <point id=”02″ />
— </code> –</root>’ –DECLARE @hdoc int –EXEC
sp_xml_preparedocument @hdoc out,@xml –SELECT * FROM
–OPENXML(@hdoc, ‘/root/code/point’, 2卡塔尔  –WITH  –(  —  itemCode
varchar(36卡塔尔(قطر‎ ‘../@id’, —  point varchar(36卡塔尔 ‘@id’ –卡塔尔 AS a —-在这里间的
结果集 a 就包涵了主从表的音信 —-INSERT INTO TABLEa SELECT * FROM a
–EXEC sp_xml_removedocument @hdoc

SQLServer数据库提取XML文件内容
本身想提取XML文件内 X市下全体LTE类型 “PhoneInfo“和”NetInof“
且“VideoTotleTraffic”>1000的多少。麻烦大神扶助看下要怎么写剧本。
XML文件内容如下:

不过,要使用OPENXML,你不得不试行两项OPENQUEWranglerY和OPENROWSET并无需的职分。这两项职分要求多个系统存款和储蓄进度。

表格列的讲明表明:

2.Importing and Process data from XML files into SQL Server tables
https://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/

DECLARE @xml varchar(1024) SET @xml=’ <root>  <code
id=”030001″>   <point id=”01″ />   <point id=”02″ />
 </code> </root>’ DECLARE @hdoc int EXEC
sp_xml_preparedocument @hdoc out,@xml SELECT * FROM OPENXML(@hdoc,
‘/root/code/point’, 2卡塔尔国  WITH  (    itemCode varchar(36卡塔尔(قطر‎ ‘../@id’,  
point varchar(36State of Qatar ‘@id’ 卡塔尔(قطر‎ AS a –在此的 结果集 a 就包涵了主从表的新闻–INSERT INTO TABLEa SELECT * FROM a EXEC sp_xml_removedocument @hdoc

<?xml version="1.0" encoding="UTF-8"?><Message><PhoneInfo><PhoneType>A31c</PhoneType><OSVersion></OSVersion><BaseBand></BaseBand><Kernel></Kernel><InnerVersion></InnerVersion><RamUsage>75</RamUsage><CpuUsage>13</CpuUsage></PhoneInfo><PositionInfo><Longitude>116.62165</Longitude><Latitude>38.04869</Latitude><LocationDesc></LocationDesc><Province>J省</Province><City>A市</City></PositionInfo><NetInfo><NetType>LTE</NetType><APN></APN><dBm></dBm><Ci>24414258</Ci><Rsrp>-112.00</Rsrp><Sinr>3</Sinr><InnerIP>10.10.130.241</InnerIP><OuterIP>10.110.5.160</OuterIP></NetInfo><TestResult><VideoName>腾讯</VideoName><VideoURL>http://m.v.qq.com</VideoURL><VideoIP>106.38.181.141</VideoIP><VideoTestTime>2016-03-31 15:49:41.754</VideoTestTime><VideoAvgSpeed>1502.80</VideoAvgSpeed><VideoPeakSpeed>9756.20</VideoPeakSpeed><TCLASS></TCLASS><BufferCounter>0</BufferCounter><VideoSize></VideoSize><VideoTotleTraffic>1950247</VideoTotleTraffic></TestResult></Message>

第多个是sp_xml_preparedocument,它将读取特定的XML文本并将其内容提取到内存中。其语法如下:

列名

step1.Importing XML data from XML file using OPENROWSET
对于第叁个剧本,第几个创设数据库的通令自个儿选用了批注掉改为手动成立该数据库,因为使用该命令创设的权杖方风貌似有个别难题。那一个品级遭逢的第三个难点是导入的xml文件过大,sql
server私下认可的布局是导入的xml文件有2M范围,在工具-选项里能够设置一下,设置完成记得重启sql
server。即使那一个标题消除了,但在导入400M左右的xml文件时,sql
server报“System.OutOfMemoryException”的不得了,估计或者跟xml文件有关,因为在跑普通的table时,4G左右的表也没有出现这些标题,权且先不消除了。

exec [dbo].SkyProcessXMLData   ‘ <DataSet>   <tblEmp>    
<name>Vishal</name>    
<designation>Developer</designation>l   </tblEmp>  
<tblEmp>     <name>Jibin</name>    
<designation>System Analyst</designation>l   </tblEmp>
</DataSet>’

SQLServer脚本如下:
DECLARE @idoc int

代码如下复制代码

数据类型

step2.Process XML data using OPENXML function

 

DECLARE @xml xml

sp_xml_preparedocument @hdoc = OUTPUT,

说明

First call the sp_xml_preparedocument stored procedure by
specifying the XML data which will then output the handle of the XML
data that it has prepared and stored in internal cache.Then we will use
the handle returned by the sp_xml_preparedocument stored procedure
in the OPENXML function to open the XML data and read it.
其一历程依据XML层级的比不上以至自身多少提取供给的不等,要指向性的写属性,外界构造都是平等的,关键是性质提取这里,目录都以写到供给领取的最深层级,然后用’../’来回到上一流(阿爹节点,对此间是以树的花样累积不常数据的)。”EXEC
sp_xml_removedocument @hDoc”语句用来释放内部存款和储蓄器。

 

SELECT @xml=bulkcolumn FROM OPENROWSET( BULK
‘C:\Users\Administrator\Desktop20160401_group_03.xml’,
SINGLE_BLOB) AS x

[, @xmltext = ]

idbigint文书档案节点的独一 ID。

step3.把询问结果存到新表中,以下是代码示例

CREATE PROCEDURE dbo.SkyProcessXMLData (  @xml XML ) AS BEGIN  DECLARE
@docHandle INT  EXECUTE sp_xml_preparedocument @docHandle OUTPUT, @xml
 SELECT    *D  FROM   OPENXML(@docHandle, ‘/DataSet/tblEmp’, 2)  WITH (
    name VARCHAR(50),designation VARCHAR(50)   )  EXECUTE
sp_xml_removedocument @docHandle END

SELECT @xml

[, @xpath_namespaces =

根成分的 ID 值为 0。保留负 ID 值。

USE Badges
GO

EXEC sp_xml_preparedocument @Idoc OUTPUT, @xml

具体参数如下:

parentidbigint标志节点的父节点。此 ID
标记的父节点不自然是父成分。具体情状决计于此 ID
所标志节点的子节点的节点类型。比如,假设节点为文本节点,则其父节点或者是贰天性能节点。

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

SELECT * into #temp FROM OPENXML (@Idoc,
‘/mediaData/Message/PhoneInfo’,2)

@hdoc:指向某内部存款和储蓄器区域的句柄,相关数据寄放在那间。注意那是一个输出变量,当该进程运转后,该变量将满含指向XML文件内容在内部存款和储蓄器地址的句柄。由于你需求在跟着接受此结果,由此要保险对其进展封存;

一旦节点坐落于 XML 文书档案的顶层,则其 ParentID 为 NULL。

SELECT @XML = XMLData FROM XMLwithOpenXMLBadges

WITH (