批量写数据---将XML数据批量写入数据库

将数据批量写入数据库的需求是比较多的,方法也有很多种,在.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> <USERID="1"Name="SBQCEL"/> <USERID="2"Name="PEACELI"/> <USERID="3"Name="SHEEPCHANG"/> </ROOT>
CREATETABLEUsers ( UserIdINT, UserNameVARCHAR(20) )
处理的方法很简单:
DECLARE@HDOCINT--文档句柄 DECLARE@XMLSTRINGVARCHAR(200)--XML字符串 SET@xmlString='<?xml version="1.0"?> <ROOT> <USERID="1"Name="SBQCEL"/> <USERID="2"Name="PEACELI"/> <USERID="3"Name="SHEEPCHANG"/> </ROOT>' --使用系统存储过程SP_XML_PREPAREDOCUMENT分析XML字符串 EXECSP_XML_PREPAREDOCUMENT@HDOCOUTPUT,@XMLSTRING --使用OPENXML从SQLServer的内部缓存查询数据 INSERTINTOUsersSELECT*FROMOPENXML(@HDOC,N'/ROOT/USER') WITH ( IDINT, NameVARCHAR(10) ) --使用系统存储过程SP_XML_REMOVEDOCUMENT释放内存 EXECSP_XML_REMOVEDOCUMENT@HDOC
如果要用T-SQL直接读取一个XML文件并将数据导入到表里,需要做一些额外的处理:先要用XP_CMDSHELL将XML数据读到一个临时表(变量表),然后将每行数据组合成一个字符串,再用上面的方法处理。需要注意的是XP_CMDSHELL以行来处理数据的。下面是一个简单的事例:
--定义一个变量表临时存储调用XP_CMDSHELL后得到的数据 DECLARE@TEMPTABLE ( IDINTIDENTITY(1,1), XMLSTRINGVARCHAR(200) ) --使用XP_CMDSHELL将XML文件的数据插入到变量表里 INSERTINTO@TEMPEXECMASTER.DBO.XP_CMDSHELL'TYPEE:\A.XML' DECLARE@LOOPINT,--循环计数 @COUNTINT,--行数 @XMLSTRINGVARCHAR(200)--存储XML字符串 SELECT@LOOP=1,--从第1行开始 @XMLSTRING='',--初始化 @COUNT=(SELECTCOUNT(1)FROM@TEMP)--获得行数 --做一个循环,将数据组合成一个字符串以便处理 WHILE(@LOOP<=@COUNT) BEGIN SELECT@XMLSTRING=@XMLSTRING+XMLSTRINGFROM@TEMPWHEREID=@LOOP SET@LOOP=@LOOP+1 END --查看处理结果 SELECT@XMLSTRING
用上面的方法处理后就将一个XML文件的数据组合成一个字符串了,然后就可以用上面的方法将数据导入到数据库了
阅读更多

没有更多推荐了,返回首页