批量装载XML文件到SQL SERVER 2K

server|xml

出于项目的需求,要从一个服务器的SQL导出数据然后导入到另一SQL服务器,项目要求不能作简单的数据同步,所以想采用XML数据格式处理。网上看到很多文章都是大同小异,说的不是很详细,例子也 全,基本都看不大懂。现在还有俩个 问题:

1、datetime类型字段有没有更好的处理方法?

2、主键重复问题,不忽略而是替换怎么处理?有什么参数嘛?

以下是偶的代码,共三部分:形成SCHEMA文件、从SQL SERVER创建XML数据、导入XML到SQL SERVER

include文件tablename内容:

<%
 const tableName = "userinfo"
 const connString = "provider=SQLOLEDB.1;data source=.;UID=sa;PWD=;database=reporthzej"
%>

形成SCHEMA文件:

<!-- #include file="tablename.asp" -->
<%
  Dim sFileName
  sFileName = Server.MapPath(".") & "\Schema\"&tableName&".xml"

 Dim conn
 '数据库连接对象
 Set conn = CreateObject("ADODB.Connection")
 conn.ConnectionString = connString
 conn.provider = "SQLXMLOLEDB.3.0"
 conn.open
' conn.open "provider=SQLXMLOLEDB.3.0;data provider=SQLOLEDB;data source=jcbdell;initial catalog=lwgtest;user id=sajt;password=sajt;"
'    Conn.CursorLocation =  3 'adUseClient

 Dim cmd
 '创建命令对象
 Set cmd = CreateObject("ADODB.Command")
 cmd.ActiveConnection = conn
' cmd.Properties("ClientSideXML") = "True"

 '生成映射文件的SQL语句
 cmd.CommandText = "Select top 0 * from "&tableName&" for xml auto, xmldata"

  Dim stmXMLout
  Set stmXMLout = CreateObject("ADODB.Stream")
  stmXMLout.Open
  cmd.Properties("Output Stream").Value = stmXMLout
  cmd.Properties("xml root") = "root"

  cmd.Execute , , 1024 'adExecuteStream

  stmXMLout.Position = 0 
'  stmXMLout.Charset = "utf-8"
'  stmXMLout.ReadText(adReadAll)
  

  Set Fs = Server.CreateObject("Scripting.FileSystemObject") 
  '把生成的XML文件存入到Schema目录下,文件名为表名,扩展名为.XML
  IF Fs.FileExists(sFileName) Then
   Fs.DeleteFile sFileName, True
  END IF

  stmXMLout.SaveToFile(sFileName)

  '载入生成的XML文件
  Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument")
  xmlDoc.async = "false"

  xmlDoc.load(sFileName)

  '对Schema元素增加属性
  Set objNodeList = xmlDoc.getElementsByTagName("Schema")
  call objNodeList.item(0).setAttribute("xmlns:sql","urn:schemas-microsoft-com:xml-sql")
 
  '对ElementType元素增加属性
  Set objNodeList = xmlDoc.getElementsByTagName("ElementType")
  call objNodeList.item(0).setAttribute("sql:relation",tableName)
    
  '保存XML文件
  xmlDoc.Save(sFileName)

 Set xlmDoc = Nothing
 Set stmXMLout = Nothing
 conn.Close
 Set conn = Nothing

%>
  <script language="javascript">
   alert("影射文件已重新生成! ");
  </script>

从SQL SERVER创建XML数据:

<!-- #include file="tablename.asp" -->
<%
   '生成XML文件
 Dim conn
 '数据库连接对象
 Set conn = CreateObject("ADODB.Connection")
 conn.ConnectionString = connString
 conn.provider = "SQLXMLOLEDB.3.0"
 conn.open

 Set FsSer = Server.CreateObject("scripting.filesystemobject")

  Dim cmdSer
  Set cmdSer = CreateObject("ADODB.Command")
  Set cmdSer.ActiveConnection = conn

  Dim stmXMLoutSer
  Set stmXMLoutSer = CreateObject("ADODB.Stream")
  
  stmXMLoutSer.Open
  cmdSer.Properties("Output Stream") = stmXMLoutSer
  'cmdSer.CommandText = "select * from "&tableName&"  For XML Auto"
  cmdSer.CommandText = "select UName, passwd,deptno, DeptName , DeptServer,DeptDatabase,BZ, convert(nvarchar(80), CreateTime, 120) as CreateTime , convert(nvarchar(80), RegTime, 120) as RegTime,ParComCode,ParComName,ParComServer,ParComDatabase,MustParCom,LXR,Tel,Email,           HandTel,nProp,nReg,ParComDataServer,DeptDataServer,FtpUser,FTPPass from userinfo for xml auto" '有 日期时间型字段的都要如此处理
  cmdSer.Properties("xml root")= "ROOT"

  cmdSer.Execute ,  , 1024 'adExecuteStream
  
  Call DealError(conn) 

  stmXMLoutSer.Position = 0

  FileName = "d:\test\"&tableName&".xml"

  IF FsSer.FileExists(FileName) Then
   FsSer.DeleteFile FileName,True
  END IF

  stmXMLoutSer.SaveToFile(FileName)
  
  Set conn = Nothing
  Set cmdSer = Nothing
  Set stmXMLoutSer = Nothing
  Set FsSer = Nothing
Response.write "已生成XML文件"
Response.End

 '错误处理,显示数据连接的错误信息
 Sub DealError(Conn)  
  If Conn.Errors.Count > 0 Then
   Response.Write "<table align=center>"
   Response.Write "<tr><td align=center><font face=宋体 size=2 color=red>系统共发生了"&Conn.Errors.Count&"个错误!</font>< td></tr>"  
   For ErrorId = 0 To Conn.Errors.Count - 1    

    Response.Write "<tr><td align=center><font face=宋体 size=2 color=red>错误"&ErrorId&":"&Conn.Errors(ErrorId). Description&"</font><td></tr>"  
   Next
   Response.write "</table>"  
  End If  
     End Sub
%>

导入XML到SQL SERVER:

<!-- #include file="tablename.asp" -->
<%
 '存储XML文件的数据

  '首先创建XML文件批量装载的对象
  set objBLSer = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
  objBLSer.ConnectionString= connString

  '发生错误时错误日志的路径及文件名称
  objBLSer.ErrorLogFile = Server.MapPath(".") & "\Error.xml"
  '忽略主健重复错误信息
  objBLSer.IgnoreDuplicateKeys = True
  '检查约束
  objBLSer.CheckConstraints = True

  '执行(映射文件、数据文件)
  SchemaFile = "d:\test\Schema\"&tableName&".xml"
  DataFile = "d:\test\"&tableName&".xml"
  response.write SchemaFile & "<br>"
  response.write DataFile & "<br>"
  objBLSer.Execute SchemaFile, DataFile
 
  set objBLSer=Nothing
%>

以上方法速度相当快!如果项目不受约束可以应用的话。

 

时间: 2024-08-31 15:41:32

批量装载XML文件到SQL SERVER 2K的相关文章

如何将 XML 文件导入 SQL Server 2000?

server|xml 导入 XML" target=_blank>XML 文件(Microsoft SQL Server 开发组供稿,questions@sqlmag.com) 问:如何将 XML" target=_blank>XML 文件导入 SQL Server 2000? 答:您可以用三种方发将 XML" target=_blank>XML 文件导入 SQL Server 2000.下面介绍这几种方法. 如果您想将文档的实体和属性提取到相关表中,那么将

XML文件导入SQL Server 2000

server|xml 问:怎样才能将XML文件导入SQL Server 2000? 答:将XML文件导入SQL Server有若干种方法,这里提供其中的3种: 大容量装载COM接口.如果需要将文档的实体和属性析取到关系表中,最快的方法就是使用SQL Server 2000 Extensible Markup Language 3.0 Service Pack 1(SQLXML 3.0 SP1)提供的大容量装载COM接口.大容量状态COM接口包含在SQLXML 3.0 SP1的免费下载中. tex

将XML文件导入SQL Server 2000

问:怎样才能将XML文件导入SQL Server 2000?答:将XML文件导入SQL Server有若干种方法,这里提供其中的3种:大容量装载COM接口.如果需要将文档的实体和属性析取到关系表中,最快的方法就是使用SQL Server 2000 Extensible Markup Language 3.0 Service Pack 1(SQLXML 3.0 SP1)提供的大容量装载COM接口.大容量状态COM接口包含在SQLXML 3.0 SP1的免费下载中.textcopy.exe命令行实用

C#怎样才能将XML文件导入SQL Server_C#教程

问:怎样才能将XML文件导入SQL Server 2000? 答:将XML文件导入SQL Server有若干种方法,这里提供其中的3种: 大容量装载COM接口.如果需要将文档的实体和属性析取到关系表中,最快的方法就是使用SQL Server 2000 Extensible Markup Language 3.0 Service Pack 1(SQLXML 3.0 SP1)提供的大容量装载COM接口.大容量状态COM接口包含在SQLXML 3.0 SP1的免费下载中. textcopy.exe命令

js装载xml文件然后发向服务器的实现代码

前台:  复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>js装载

Build Data-Driven Web Services with Updated XML Support for SQL Server 2000

server|services|web|xml Download the code for this article: SQLXML3.exe (239KB) --->SUMMARY XML is becoming the ubiquitous data format on the Web, and XML support in SQL Server is evolving to meet the additional demand. Using XML, SOAP, HTTP, and SQL

各种类型文件在SQL Server中存储的解决方案

server|解决 数据的持久化是开发的基础性工作,我们不可避免要将各种的类型文件持久化,关于文件(或是大对象)的存储,我在我的blog http://www.cnblogs.com/supercode/articles/156744.html谈过今天我们从设计的角度来实现这功能,从本文中您将了解道以下内容l         SQL Server中的数据类型l         数据表,存储过程的设计l         逻辑层实现各种类型文件的自动转化l         DataGrid中的自定义

sqlserver-CSV文件导入SQL SERVER

问题描述 CSV文件导入SQL SERVER 使用数据库SQL SERVER因为CSV文件包含多个CSV小文件,格式如下: NAME GENTLE TIME ATTR1 ATTR2K F 0918 123 159NAME GENTLE TIME ATTR1 ATTR2K M 0919 135 246NAME HEIGHT TIME ATTR3 ATTR4 ATTR5J 165 0918 159 556 456J 170 0919 856 735 895 可以看到NAME那一行是下面数据的意义,而

C# 将xml文件导入sql数据库表中

问题描述 xml文件<class><student><name>张三</name><sex>男</sex><year>11</year></student><student><name>刘三</name><sex>男</sex><year>13</year></student><student>