视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
把XML数据插入到SQLServer数据库的表中
2020-11-09 07:32:22 责编:小采
文档


6.3 把XML数据插入到SQL Server数据库的表中 我们可以通过使用系统存储过程sp_xml_preparedocument的OPENXML函数把XML文档中的数据插入数据库中。其中,系统存储过程sp_xml_preparedocument用来创建一个能被插入数据库的XML文档的内部表示,该存储过程返回一

6.3 把XML数据插入到SQL Server数据库的表中

我们可以通过使用系统存储过程sp_xml_preparedocument的OPENXML函数把XML文档中的数据插入数据库中。其中,系统存储过程sp_xml_preparedocument用来创建一个能被插入数据库的XML文档的内部表示,该存储过程返回一个可以访问XML文档内部表示的句柄,另一方面,系统存储过程sp_xml_removedocument可以用来删除XML文档的内部表示。

系统存储过程sp_xml_preparedocument的语法如下:

  1. sp_xml_preparedocument handleddoc OUTPUT,xmltext

其中:

● handleddoc代表XML文档句柄的整数值。

● xmltext代表原始的XML文档的文本值。

系统存储过程sp_xml_removedocument的语法如下:

  1. sp_xml_removedocument handleddoc

其中:

handleddoc代表XML文档句柄的整数值。

上述这两个存储过程都可以使用函数OPENXML,函数OPENXML的语法如下:

  1. OPENXML(handleddoc,rowpattern,flagvalue)
  2. With tablename

其中:

● handleddoc代表XML文档句柄的整数值。

● rowpattern代表来识别XML文档的节点XPath模式的可变长字符串的值。

● flagvalue代表XML数据和相关的行集之间映射的整数值。如果值为1表示要对数据库中的字段做基于属性的映射;如果值为2表示要对数据库中的字段做基于元素的映射。

● tablename代表数据库中的表名。

系统存储过程sp_xml_preparedocument读入XML文档内的文本并用MSXML解析器进行处理。处理以后,XML文档以带有元素、属性和文本的树型结构显示。OPENXML函数应用该树型结构并生成包含XML文档所有部分的行集。使用OPENXML和INSERT语句,即可以将行集中的数据插入到表中。下面通过实例进行讲解。

实例6-1 以属性的形式将XML数据插入到SQL Server数据库的表中

(1) 在SQL Server查询分析器窗口中输入以下代码:

  1. USE school
  2. LECT * FROM student

运行后,先来查看插入之前student表中的数据,如图6-1所示。

(2) 重新输入以下代码:

  1. 1 USE school
  2. 2 DECLARE @doc varchar(1000)
  3. 3 DECLARE @idoc int
  4. 4 SET @doc='
  5. 5
  6. 6 sex="female" age="21">
  7. 7
  8. 8 '
  9. 9 exec sp_xml_preparedocument @idoc output,@doc
  10. 10 select * from openxml(@idoc,'/ROOT/student',1)
  11. 11 with(id int,name varchar(40),sex varchar(20),
  12. 12 age int)
  13. 13 insert student
  14. 14 select * from openxml(@idoc,'/ROOT/student')
  15. 15 with student
  16. 16 exec sp_xml_removedocument @idoc

在上面代码的第4~8行创建了一个变量@doc并把XML数据存放在该变量中。然后,第9行执行系统存储过程sp_xml_preparedocument,来创建一个能把数据插入数据库的XML文档内部表示,该系统存储过程返回一个保存在变量@idoc中的句柄,可以用该句柄访问XML文档的内部表示。第10行使用一个select语句访问XML文档的内部表示,并把该文档中的所有数据显示出来。

(3) 运行程序,结果如图6-2所示。

(4) 重新输入以下代码。

  1. USE school
  2. SELECT * FROM student

运行后,查看插入之后student表中的数据,如图6-3所示。

通过图6-3可以清楚地看到,XML数据已经被插入到了数据库中。

实例6-2 以元素的形式将XML数据插入到SQL Server数据库的表中

接着上一个实例,我们继续进行数据的插入,不过这次是以元素的形式进行插入操作的。

首先在查询窗口中输入以下代码:

  1. 1 DECLARE @doc varchar(1000)
  2. 2 DECLARE @idoc int
  3. 3 SET @doc='
  4. 4
  5. 5 6
  6. 6 sun
  7. 7 male
  8. 8 24
  9. 9
  10. 10 '
  11. 11 exec sp_xml_preparedocument @idoc output,@doc
  12. 12 select * from openxml(@idoc,'/ROOT/student',2)
  13. 13 with(id int,name varchar(40),sex varchar(20),
  14. 14 age int)
  15. 15 insert student
  16. 16 select * from openxml(@idoc,'/ROOT/student',2)
  17. 17 with student
  18. 18 exec sp_xml_removedocument @idoc

在上面代码的第3~10行创建了一个变量@doc,并把XML数据存放在该变量中。然后,第11行执行系统存储过程sp_xml_preparedocument,来创建一个能把数据插入数据库的XML文档的内部表示,该系统存储过程返回一个保存在变量@idoc中的句柄,可以用该句柄访问XML文档的内部表示。第12行使用一个select语句访问XML文档的内部表示,并把该文档中的所有数据显示出来了。该段代码与实例6-1中代码的唯一区别就在于变量中存放的XML数据是以元素的形式出现的,而不是属性的形式。

运行程序,结果如图6-4所示。

重新输入以下代码:

  1. USE school
  2. SELECT * FROM student

运行后,查看插入之后student表中的数据,如图6-5所示。

可以清楚地看到,XML数据已经被插入到了数据库中。

通过上述实例可以看到,在SQL Server 2005 中,OPENXML的功能得到了增强,它可以将XML类型数据传递到sp_xml_preparedocument存储过程中,并且可以在WITH子句中使用新的数据类型。

下载本文
显示全文
专题