杨泽数据库学习园

赠送各种软件开发学习资料: oracle9i 视频教程.各种习题例题:. 如果有需访问http://tb.ok164.com/

杨泽ID:yangzeDB
1889次访问,排名2万外好友0人,关注者0
OK
yangzeDB的文章
原创 9 篇
翻译 0 篇
转载 14 篇
评论 4 篇
最近评论
qpzkzp:Wow gold
回复:怎么会有错呢? 本机测试过了的. 仔细看一下
langjianliang:我怎么运行不出来啊,


王小伟:怎么不对啊,什么原因,是不是有错啊,不要糊弄大家的热情
文章分类
收藏
    相册
    net博客
    net博客
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 批量写数据---将XML数据批量写入数据库 收藏

    新一篇:  获取某一月的天数 and 获取本周的周一 | 旧一篇: SQL Server 2005 分页存储过程

    将数据批量写入数据库的需求是比较多的,方法也有很多种,在.net 里使用程序比较好的方法是使用 Bulk Copy 将大量数据复制到数据库 。如果数据源为XML文件,使用SQL BULK COPY就需要将XML数据导入到DataTable,下面的方法可以直接将XML数据传到SQL SERVER然后处理,另外还可以直接使用T-SQL将XML文件的数据导入到数据库。这里最主要的是要使用二个系统存储过程:SP_XML_PREPAREDOCUMENTSP_XML_REMOVEDOCUMENT     SP_XML_PREPAREDOCUMENT 的功能是:读取XML文件后使用 MSXML 分析器 (Msxmlsql.dll) 对XML数据进行分析,并提供分析后的文档供使用。分析后得到的数据是对 XML 文件中的各节点(元素、属性、文本和注释等)以树状形式表现。分析后的数据存储在 SQL Server 的内部缓存中。     SP_XML_REMOVEDOCUMENT 的功能是:根据文档句柄释放文档所占的内存。     先建立一个XML字符串和一个表:
    <?xml version="1.0"?> <ROOT>     <USER ID="1" Name="SBQCEL"/>     <USER ID="2" Name="PEACELI"/>     <USER ID="3" Name="SHEEPCHANG"/> </ROOT>
       
    CREATE TABLE Users (     UserId INT,     UserName VARCHAR(20)  )
       处理的方法很简单:
    DECLARE @HDOC INT    --文档句柄 DECLARE @XMLSTRING VARCHAR(200)        --XML字符串 SET @xmlString ='<?xml version="1.0"?> <ROOT>     <USER ID="1" Name="SBQCEL"/>     <USER ID="2" Name="PEACELI"/>     <USER ID="3" Name="SHEEPCHANG"/> </ROOT>' --使用系统存储过程SP_XML_PREPAREDOCUMENT分析XML字符串 EXEC SP_XML_PREPAREDOCUMENT @HDOC OUTPUT, @XMLSTRING --使用OPENXML从SQL Server 的内部缓存查询数据 INSERT INTO Users SELECT * FROM OPENXML(@HDOC,N'/ROOT/USER') WITH  (      ID INT,     Name VARCHAR(10) ) --使用系统存储过程SP_XML_REMOVEDOCUMENT释放内存 EXEC SP_XML_REMOVEDOCUMENT @HDOC
       如果要用T-SQL直接读取一个XML文件并将数据导入到表里,需要做一些额外的处理:先要用XP_CMDSHELL将XML数据读到一个临时表(变量表),然后将每行数据组合成一个字符串,再用上面的方法处理。需要注意的是XP_CMDSHELL以行来处理数据的。下面是一个简单的事例:
    --定义一个变量表临时存储调用XP_CMDSHELL后得到的数据 DECLARE @TEMP TABLE (     ID INT IDENTITY(1,1),     XMLSTRING VARCHAR(200) ) --使用XP_CMDSHELL将XML文件的数据插入到变量表里 INSERT INTO @TEMP EXEC MASTER.DBO.XP_CMDSHELL 'TYPE E:\A.XML' DECLARE @LOOP INT,    --循环计数         @COUNT INT,    --行数         @XMLSTRING VARCHAR(200)    --存储XML字符串 SELECT  @LOOP = 1,    --从第1行开始         @XMLSTRING='',    --初始化         @COUNT = (SELECT COUNT(1FROM @TEMP)    --获得行数 --做一个循环,将数据组合成一个字符串以便处理 WHILE (@LOOP<=@COUNT) BEGIN         SELECT @XMLSTRING = @XMLSTRING + XMLSTRING FROM @TEMP WHERE ID = @LOOP     SET @LOOP = @LOOP + 1 END --查看处理结果 SELECT @XMLSTRING
    用上面的方法处理后就将一个XML文件的数据组合成一个字符串了,然后就可以用上面的方法将数据导入到数据库了

    发表于 @ 2008年06月24日 17:32:00|评论(loading...)|编辑|收藏

    新一篇:  获取某一月的天数 and 获取本周的周一 | 旧一篇: SQL Server 2005 分页存储过程

    评论

    #王小伟 发表于2008-07-06 09:48:12  IP: 61.54.82.*
    怎么不对啊,什么原因,是不是有错啊,不要糊弄大家的热情
    #langjianliang 发表于2008-07-06 09:50:22  IP: 61.54.82.*
    我怎么运行不出来啊,


    #回复 发表于2008-07-07 11:03:40  IP: 219.233.245.*
    怎么会有错呢? 本机测试过了的. 仔细看一下
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © yangzeDB