OPENXML是多少个rowset函数,它的专门的职业措施周围于rowset函数OPENQUEEscortY和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=”1998-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=”1999-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’,1卡塔尔 WITH (CustomerID
VARCHAHaval(40State of Qatar,ContactName VARCHAPRADO(40卡塔尔(قطر‎卡塔尔 OPENXML有四个参数:
第二个是sp_xml_preparedocument读取是的OUTPUT参数,在本示例中就是@hdoc;
第4个是一个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

但是,要选拔OPENXML,你必得施行两项OPENQUEEnclaveY和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(36卡塔尔国 ‘@id’ 卡塔尔 AS a –在那地的 结果集 a 就含有了主从表的新闻–INSERT INTO TABLEa SELECT * FROM a EXEC sp_xml_removedocument @hdoc

先是个是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>’

代码如下复制代码

数据类型

step2.Process XML data using OPENXML function

 

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”语句用来释放内部存款和储蓄器。

 

[, @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

[, @xpath_namespaces =

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

威澳门尼斯人36366com,USE Badges
GO

实际参数如下:

parentidbigint标志节点的父节点。此 ID
标志的父节点不必然是父成分。具体处境决定于此 ID
所标识节点的子节点的节点类型。比方,假使节点为文本节点,则其父节点可能是一个天性节点。

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

@hdoc:指向某内部存储器区域的句柄,相关数据存放在这里处。注意那是二个输出变量,当该进程运维后,该变量将含有指向XML文件内容在内部存款和储蓄器地址的句柄。由于你须要在紧接着使用此结果,由此要承保对其进行保存;

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

SELECT @XML = XMLData FROM XMLwithOpenXMLBadges

@xmltext:实际上你所愿意管理的XML文本;

节点类型int标志节点类型,是对应于 XML 对象模型 (DOM卡塔尔(قطر‎节点类型编号的八个整数。

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

@xml_namespaces:为了健康操作你的XML数据所急需的别样名字空间引得。注意在此边现身的别的UENVISIONL都急需用尖括号括起来;

下列值是足以显得在那列中以指明节点类型的值:

CREATE TABLE Badges
(
UserId varchar(50),
Name varchar(100),
Date datetime
);

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注