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可以作為一個數據源操作。