mssqlserver中读取xml文件技巧百家了乐八大技巧:

 百家乐-数据     |      2020-04-22 21:55

OPENXML是三个rowset函数,它的干活措施临近于rowset函数OPENQUEXC60Y和OPENROWSET。使用OPENXML能够对XML数据进行JOINs操作而无需率起始入数据。你还是能将其同INSERT、SELECT、UPDATE以致DELETE等操香港作家联谊会晤利用。

一时会在存款和储蓄进程中拍卖局地XML格式的数量,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 MSXML 深入分析器 (Msxmlsql.dllState of Qatar对其进展深入分析。大家就可以相当轻便的在蕴藏进度中得到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="1997-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="1997-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 VARCHAQashqai(40State of Qatar,ContactName VARCHA逍客(40卡塔尔国卡塔尔国 OPENXML有四个参数: 第叁个是sp_xml_preparedocument读取是的OUTPUT参数,在本示例中正是@hdoc; 第一个是一个XPath表明式,用来博取钦定地方的多寡; 第五个是多个可选拔,用来表示收获的法子,有0,1,2,8多种取值,详细表达请看 FROM前边的WITH也是可选的,用来钦点获取哪些数据字段,下边代码中只取了CustomerID和ContactName。上边的查询结果如下: CustomerID ContactName —————————————- —————————————- VINET 保罗 Henriot LILAS 卡洛斯 Gonzlez 假使不内定WITH子句,查询出来的是二个暗中认可的表构造,如下:

唯独,要动用OPENXML,你不得不施行两项OPENQUEPRADOY和OPENROWSET并无需的职务。这两项职责供给八个系统存款和储蓄进程。

表格列的讲授表明:

先是个是sp_xml_preparedocument,它将读取特定的XML文本并将其故事情节提取到内部存款和储蓄器中。其语法如下:

列名

代码如下复制代码

数据类型

sp_xml_preparedocument @hdoc = OUTPUT,

说明

[, @xmltext = ]

idbigint文书档案节点的必由之路 ID。

[, @xpath_namespaces =

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

现实参数如下:

parentidbigint标志节点的父节点。此 ID 标志的父节点不必然是父元素。具体意况决定于此 ID 所标记节点的子节点的节点类型。举例,借使节点为文本节点,则其父节点大概是二个特性节点。

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

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

@xmltext:实际上你所期望管理的XML文本;

节点类型int标记节点类型,是对应于 XML 对象模型 (DOM卡塔尔节点类型编号的贰个大背头。

@xml_namespaces:为了健康操作你的XML数据所急需的其余名字空间引得。注目的在于此地现身的别样U奥迪Q5L都亟待用尖括号括起来;

下列值是能够来得在那列中以指明节点类型的值:

一旦所传递的这个参数都灵验,而且XML文书档案存在,那么你的XML数据就能够被贮存到内部存款和储蓄器中去。现在您就能够调用sp_xml_preparedocument,传递存放有XML文件的变量,然后推行OPENXML。语法如下:

1 = 成分节点

代码如下复制代码

2 = 属性节点

OPENXML(idocint [in],rowpatternnvarchar[in],[flagsbyte[in]])

3 = 文本节点

[WITH (SchemaDeclaration | TableName)]

4 = CDATA 部分节点

留意:在本文中从不足够的文字来说述OPENXML所收受的参数。请参阅BOL以获得更加多消息。在Transact-SQL Reference中索求OPENXML。

5 = 实体引用节点

将来大家早已达到了最终的步骤。全数盈余的劳作正是导入贰个实在的XML文件到SQL并开展拍卖。

6 = 实体节点

大旨的技巧是,将文件逐行按文件读取。然后把具备读取的行连接为二个大的VARCHA路虎极光变量。最后,将变量传递给前面所说的代码。

7 = 管理指上巳点

以下正是读取文件并将其内容存放到某变量的代码:

8 = 注释节点

代码如下复制代码

9 = 文书档案节点

DECLARE @FileName varchar(255)

10 = 文书档案类型节点