1 先上代码和截图
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
--
定义XML文本
declare @xmlText varchar ( 1000 )
-- 文档句柄
declare @hdoc int
-- 设定XML文本内容
set @xmlText =
'
<?xml version="1.0" encoding="gbk"?>
<root>
<Stu id1="03" studentName1="小张11"></Stu>
<Stu id1="04" studentName1="小李11"></Stu>
</root>
'
-- 解析XML文本内容
exec sp_xml_preparedocument @hdoc output, @xmlText
-- 读取XML的内容
select t. * from openxml( @hdoc , ' root/Stu ' ) with (id1 int ,studentName1 varchar ( 20 )) as t
exec sp_xml_removedocument @hdoc
declare @xmlText varchar ( 1000 )
-- 文档句柄
declare @hdoc int
-- 设定XML文本内容
set @xmlText =
'
<?xml version="1.0" encoding="gbk"?>
<root>
<Stu id1="03" studentName1="小张11"></Stu>
<Stu id1="04" studentName1="小李11"></Stu>
</root>
'
-- 解析XML文本内容
exec sp_xml_preparedocument @hdoc output, @xmlText
-- 读取XML的内容
select t. * from openxml( @hdoc , ' root/Stu ' ) with (id1 int ,studentName1 varchar ( 20 )) as t
exec sp_xml_removedocument @hdoc
id1 studentName1
-- --------- --------------------
3 小张11
4 小李11
( 2 行受影响)
-- --------- --------------------
3 小张11
4 小李11
( 2 行受影响)
2 sp_xml_preparedocument 和 openxml用法
下面摘自MSDN:
读取作为输入提供的 XML 文本,然后使用 MSXML 分析器 (Msxmlsql.dll) 对其进行分析,并提供分析后的文档供使用。分析后的文档对 XML 文档中的各节点(元素、属性、文本和注释等)的树状表示形式。
sp_xml_preparedocument 返回一个句柄,可用于访问 XML 文档的新创建的内部表示形式。该句柄在会话的持续时间内有效,或者通过执行 sp_xml_removedocument 使其在句柄失效前一直有效。
3 更详细用法参考文档