xml转sql
SQLServer2005分解并导入xml文件[@more@]
1. 一次性导入:
DECLARE @idoc int;
DECLARE @doc xml;
SELECT @doc=BulkColumn FROM OPENROWSET(BULK N'E:MStarInstryCodes.xml', SINGLE_BLOB) AS x
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * into tmp_tab FROM OPENXML (@idoc, '/Root/Record'/',2)
WITH
(
InstryCode varchar(10)
,InstryGlobalId varchar(10)
,InstryName varchar(100)
,SectorCode varchar(10)
,SectorGlobalId varchar(10)
,SectorName varchar(100)
,SuperSectorCode varchar(10)
,SuperSectorName varchar(100)
,GroupCode varchar(10)
,GroupName varchar(100)
,CountryId varchar(3)
)
EXEC sp_xml_removedocument @idoc
select * from tmp_tab
2. 先导入到表中varchar(MAX)列,然后再用OPENXML解析,读出。
-- 使用SINGLE_CLOB参数,tmp_raw中字段为varcahr(MAX)类型
SELECT * into tmp_raw FROM OPENROWSET(BULK N'E:MStarInstryCodes.xml', SINGLE_CLOB) AS x
DECLARE @idoc int;
DECLARE @doc xml;
select @doc = BulkColumn from tmp_raw
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT top 10 * FROM OPENXML (@idoc, '/Root/Record', 1)
WITH
(
InstryCode varchar(10)
,InstryGlobalId varchar(10)
,InstryName varchar(100)
,SectorCode varchar(10)
,SectorGlobalId varchar(10)
,SectorName varchar(100)
,SuperSectorCode varchar(10)
,SuperSectorName varchar(100)
,GroupCode varchar(10)
,GroupName varchar(100)
,CountryId varchar(3)
)
EXEC sp_xml_removedocument @idoc
B. xml文件如何写入sql数据库
sqlserver2005分解并导入xml文件[@more@]
1.
一次性导入:
declare
@idoc
int;
declare
@doc
xml;
select
@doc=bulkcolumn
from
openrowset(bulk
n'e:mstarinstrycodes.xml',
single_blob)
as
x
exec
sp_xml_preparedocument
@idoc
output,
@doc
select
*
into
tmp_tab
from
openxml
(@idoc,
'/root/record'/',2)
with
(
instrycode
varchar(10)
,instryglobalid
varchar(10)
,instryname
varchar(100)
,sectorcode
varchar(10)
,sectorglobalid
varchar(10)
,sectorname
varchar(100)
,supersectorcode
varchar(10)
,supersectorname
varchar(100)
,groupcode
varchar(10)
,groupname
varchar(100)
,countryid
varchar(3)
)
exec
sp_xml_removedocument
@idoc
select
*
from
tmp_tab
2.
先导入到表中varchar(max)列,然后再用openxml解析,读出。
--
使用single_clob参数,tmp_raw中字段为varcahr(max)类型
select
*
into
tmp_raw
from
openrowset(bulk
n'e:mstarinstrycodes.xml',
single_clob)
as
x
declare
@idoc
int;
declare
@doc
xml;
select
@doc
=
bulkcolumn
from
tmp_raw
exec
sp_xml_preparedocument
@idoc
output,
@doc
select
top
10
*
from
openxml
(@idoc,
'/root/record',
1)
with
(
instrycode
varchar(10)
,instryglobalid
varchar(10)
,instryname
varchar(100)
,sectorcode
varchar(10)
,sectorglobalid
varchar(10)
,sectorname
varchar(100)
,supersectorcode
varchar(10)
,supersectorname
varchar(100)
,groupcode
varchar(10)
,groupname
varchar(100)
,countryid
varchar(3)
)
exec
sp_xml_removedocument
@idoc
C. 怎么实现把一个xml数据插入到SQL数据库中
把所有内容插到一个数据库中的文本类型的字段就行了啊,比如varchar text类型的字段都可以,要的时候再读出来就行
————————————————————
原来你是这个意思啊,请问你要用什么语言提取节点中的文本?
________________________________________
c#不会,不过你可以去搜搜XML操作类,很多的
D. vc 怎么把xml文件保存到sql中
我理解你是想问:如何把xml文件保存到SqlServer数据库中?一个xml对应一个数据库表。
通常就是读取xml中元素(节点)的值并作为insert
的参数,然后执行insert语句就是咯(当然你也可以把xml文件读到DataSet中,然后将DataSet数据保存到数据,这样不必使用Insert了)。至于你要打印那就是读数据库数据并整理的问题了。
但具体到你的问题,要看你xml文件的格式以及你要打印的格式才能给你代码。
补充问题的代码:
你可以使用Stream
s=StreamReader(fillpath,
System.Text.Encoding.GetEncoding("UTF-8")).BaseStream;直接把s作为文本存入你数据库中的列
E. 怎么将xml中的数据导入到sql server数据库的一张表中
可以看一下这个
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
F. 如何将xml文件转换成sql的表
select * from 表名 for xml 以下是详细介绍: FOR 子句 FOR 子句用于指定 BROWSE 或 XML 选项(BROWSE 和 XML 是不相关的选项)。 语法 [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY BASE64 ] } ]...
G. xml文档转换存储到sql sever数据库中
分无所谓,如果是你要的看着给吧。不知道你了解多少,我就尽量详细点,罗嗦点。
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import java.sql.*; //估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import java.io.*;
import javax.xml.parsers.*; //这个包是用来解析XML的
import org.w3c.dom.*; //工厂包
import org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public class XmlToSql{
public static void main(string[] args){
//根据XML节点设计出的表字段,我先假设有3个字段
String id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document doc=builder.parse(new FileInputStrem(new File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int i=0;i<nodes.getLength(),i++){ //开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element node=(Element)nodes.item(i); //先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue(); //用这个方法取出XML中 属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化, .NET就方便的多。都写到这里了就写完吧
sql="insert into a values("+id+"','"+username+"'+'"password+"')";
con.createStatement().executeUpdate(sql);
}catch(Exception e{e.printStackTrace();}
}
}
//好了,你的XL信息循环插入表中了,其实XML结构很关键,这里是但节点循环,有时候出现多子节点,或者非正规体那就要根据XML的结构来循环输入了,不过大体方法和思路都是一样的。由于直接就在这里写的代码,没在IDE中写,所以括号匹配方面也许会出小问题,见谅
H. 如何将 XML 文件导入 SQL Server 2000
答:您可以用三种方发将 XML 文件导入 SQL Server 2000。下面介绍这几种方法。
如果您想将文档的实体和属性提取到相关表中,那么将 XML 文件导入 SQL Server 的最快方法是使用 SQL Server 2000 Web Release (SQLXML) 3.0 Service Pack 1 (SP1) 中的 Bulk Load COM 界面。界面随免费的 SQLXML 下载提供:
这种 XML 导入方法十分迅速,并且此下载用代码示例的形式提供了批量加载工具。
如果您不想将文档的实体和属性提取到相关表中,可使用 text.exe 命令行实用程序。使用 text.exe 是将文档加载到文本数据类型栏的好办法。
如果您的 XML 文档十分简单,可通过编写查看 XML 文档各行内容并将信息提取到表中的转换代码来使用数据转换服务 (DTS)。
I. xml数据导入sql server2008
OPENXML 通过 XML 文档提供行集视图。由于 OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表、视图或 OPENROWSET 函数)的 Transact-SQL 语句中使用 OPENXML。
Transact-SQL 语法约定
语法
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
参数
idoc
XML 文档的内部表式形式的文档句柄。通过调用 sp_xml_preparedocument 创建 XML 文档的内部表式形式。
rowpattern
XPath 模式,用来标识要作为行处理的节点(这些节点在 XML 文档中,该文档的句柄由 idoc 参数传递)。
flags
指示应在 XML 数据和关系行集间使用映射以及应如何填充溢出列。flags 为可选输入参数,可以是下列值之一:
字节值 说明
0
默认为“以属性为中心”的映射。
J. 怎样把.xml的数据导入到SQL Server 2008中
bcp
bulk insert
都可以
bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导入数据文件。
语法举例:
bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml
程序里面最好用这个。如果手动,管理器中导入就可以,用.net程序也可以,xml可以作为一个数据源操作。