如何将xml文件导入sql server数据库中?

时间:2022-09-21 19:08:01
我已经完成一个网站,用的是JSP技术,数据全部存储在xml文件中,
我想把xml文件再存入sql server数据库。
  一直没有找到这方面的资料,请大家给予帮助。

8 个解决方案

#1


给你个例子:

DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT    *  into 表
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20))

#2


********************* 导入 xml 文件

DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue 
white red">
<Urgency>Important</Urgency>
Happy Customer.
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5), 
amount float, 
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc

#3


回复人: zjcxc(: 邹建 :) 
--用SQL来处理导入很麻烦,下面是示例

DECLARE @idoc int,@doc varchar(8000)

--从文件中读出XML内容到临时表
create table #tb (doc varchar(8000))
bulk insert #tb from 'c:\a.xml'

--将读取到的数据保存到变量中
set @doc=''
select @doc=@doc+doc from #tb

--删除临时表
drop table #tb

/*--xml文档内容
SET @doc ='
<?xml version=''1.0'' encoding="gb2312"?>
<LanguageSource>
<Book>
   <type>报告文学</type>
   <author>不详</author>
   <title>不详</title>
      <context>
         <chapter>
             <title>不详1</title>
             <doc>不详1</doc>
         </chapter>
         <chapter>
             <title>不详2</title>
             <doc>不详2</doc>
         </chapter>
      </context>
</Book>
</LanguageSource>'
--*/


EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

--创建测试的表
create table 作者表(作者ID int identity(1,1),作者名字 varchar(50),作者介绍 varchar(50))
create table 类型表(类型ID int identity(1,1),类型名 varchar(50))
create table 书名列表(书名ID int identity(1,1),作者ID int,类型ID int,书名 varchar(50))

--下面是数据处理
declare @作者ID int,@类型ID int

--作者表:作者ID、作者名字、作者介绍
insert 作者表(作者名字)
SELECT * FROM OPENXML (@idoc, '/LanguageSource/Book',2)
WITH (
作者名字 varchar(50) 'author'
)
set @作者id=@@identity

--类型表:类型ID、类型名
insert into 类型表(类型名)
SELECT * FROM OPENXML (@idoc, '/LanguageSource/Book',2)
WITH (
类型名 varchar(50) 'type'
)
set @类型ID=@@identity

--书名列表:书名ID、作者ID、类型ID、书名(也就是XML中的第一个TITLE)
insert into 书名列表(作者ID,类型ID,书名)
SELECT @作者ID,@类型ID,* FROM OPENXML (@idoc, '/LanguageSource/Book',2)
WITH (
书名 varchar(50) 'title'
)

EXEC sp_xml_removedocument @idoc

go

--显示处理结果
select * from 作者表
select * from 类型表
select * from 书名列表

--删除测试表
drop table 作者表,类型表,书名列表

#4


/*--用ADO存储XML
--*/

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@str varchar(1000)
set @str='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='
+db_name()+';Data Source='+@@servername
--上面是用ADO连接SQL的字符串,根据你的情况做调整
/*--ADO连接SQL的字符串模板
@str='Provider=SQLOLEDB.1;Persist Security Info=True;User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名'
--*/

exec @err=sp_oacreate 'adodb.recordset',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,'地区资料',@str
if @err<>0 goto lberr

exec master..xp_cmdshell 'del c:\a.xml'
exec @err=sp_oamethod @obj,'save',null,'c:\a.xml',1
if @err<>0 goto lberr

exec @err=sp_oadestroy @obj
return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
go

#5


我看不懂。
 我的xml文件全部是独立的,我是想知道有没有一种包或什么方法,能将我的xml文件中的数据再转存入sql server数据库。
 在我网站中,xml文件相当于数据库,用于数据存储,但是不够安全,所以我要把xml文件中的数据再存入sql server数据库。
 我想要的是:有一种包,能够自动将更新后的xml文件存入数据库。

#6


没有这种自动的方法,你要写代码来处理,当然,也可以考虑用XML对象.

楼上帖的我的处理方法,只是简单的分析一个xml文件,从里面提取数据而已.

如果要更深层次的处理,可以发信息给黄山,他在这方面有研究.

http://expert.csdn.net/Message_Board/Send.asp?sendto=leimin

#7


楼上几位的处理方法就可以了呀!呵呵!!!!!!!!!!!!!!

#8


没有能完全符合你要求的包,你还是多看看jsp中操作xml文档的内容,然后编程序实现你的意图,这样比较好

#1


给你个例子:

DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT    *  into 表
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20))

#2


********************* 导入 xml 文件

DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue 
white red">
<Urgency>Important</Urgency>
Happy Customer.
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5), 
amount float, 
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc

#3


回复人: zjcxc(: 邹建 :) 
--用SQL来处理导入很麻烦,下面是示例

DECLARE @idoc int,@doc varchar(8000)

--从文件中读出XML内容到临时表
create table #tb (doc varchar(8000))
bulk insert #tb from 'c:\a.xml'

--将读取到的数据保存到变量中
set @doc=''
select @doc=@doc+doc from #tb

--删除临时表
drop table #tb

/*--xml文档内容
SET @doc ='
<?xml version=''1.0'' encoding="gb2312"?>
<LanguageSource>
<Book>
   <type>报告文学</type>
   <author>不详</author>
   <title>不详</title>
      <context>
         <chapter>
             <title>不详1</title>
             <doc>不详1</doc>
         </chapter>
         <chapter>
             <title>不详2</title>
             <doc>不详2</doc>
         </chapter>
      </context>
</Book>
</LanguageSource>'
--*/


EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

--创建测试的表
create table 作者表(作者ID int identity(1,1),作者名字 varchar(50),作者介绍 varchar(50))
create table 类型表(类型ID int identity(1,1),类型名 varchar(50))
create table 书名列表(书名ID int identity(1,1),作者ID int,类型ID int,书名 varchar(50))

--下面是数据处理
declare @作者ID int,@类型ID int

--作者表:作者ID、作者名字、作者介绍
insert 作者表(作者名字)
SELECT * FROM OPENXML (@idoc, '/LanguageSource/Book',2)
WITH (
作者名字 varchar(50) 'author'
)
set @作者id=@@identity

--类型表:类型ID、类型名
insert into 类型表(类型名)
SELECT * FROM OPENXML (@idoc, '/LanguageSource/Book',2)
WITH (
类型名 varchar(50) 'type'
)
set @类型ID=@@identity

--书名列表:书名ID、作者ID、类型ID、书名(也就是XML中的第一个TITLE)
insert into 书名列表(作者ID,类型ID,书名)
SELECT @作者ID,@类型ID,* FROM OPENXML (@idoc, '/LanguageSource/Book',2)
WITH (
书名 varchar(50) 'title'
)

EXEC sp_xml_removedocument @idoc

go

--显示处理结果
select * from 作者表
select * from 类型表
select * from 书名列表

--删除测试表
drop table 作者表,类型表,书名列表

#4


/*--用ADO存储XML
--*/

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@str varchar(1000)
set @str='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='
+db_name()+';Data Source='+@@servername
--上面是用ADO连接SQL的字符串,根据你的情况做调整
/*--ADO连接SQL的字符串模板
@str='Provider=SQLOLEDB.1;Persist Security Info=True;User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名'
--*/

exec @err=sp_oacreate 'adodb.recordset',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,'地区资料',@str
if @err<>0 goto lberr

exec master..xp_cmdshell 'del c:\a.xml'
exec @err=sp_oamethod @obj,'save',null,'c:\a.xml',1
if @err<>0 goto lberr

exec @err=sp_oadestroy @obj
return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
go

#5


我看不懂。
 我的xml文件全部是独立的,我是想知道有没有一种包或什么方法,能将我的xml文件中的数据再转存入sql server数据库。
 在我网站中,xml文件相当于数据库,用于数据存储,但是不够安全,所以我要把xml文件中的数据再存入sql server数据库。
 我想要的是:有一种包,能够自动将更新后的xml文件存入数据库。

#6


没有这种自动的方法,你要写代码来处理,当然,也可以考虑用XML对象.

楼上帖的我的处理方法,只是简单的分析一个xml文件,从里面提取数据而已.

如果要更深层次的处理,可以发信息给黄山,他在这方面有研究.

http://expert.csdn.net/Message_Board/Send.asp?sendto=leimin

#7


楼上几位的处理方法就可以了呀!呵呵!!!!!!!!!!!!!!

#8


没有能完全符合你要求的包,你还是多看看jsp中操作xml文档的内容,然后编程序实现你的意图,这样比较好