XML求救: 怎樣用OpenXML生成一個紀錄集?
XML求救: 怎樣用OpenXML生成一個紀錄集?
楼主N_chow(Yukon)2002-05-14 14:33:54 在 MS-SQL Server / 基础类 提问 前端用Recordset生成了一個XML文件,并把文件內容傳到了SQL Server上。以下是源碼,請問,我如何用OpenXML函數來生來一個結果集,并把結果存到一個temp table??
SET QUOTED_IDENTIFIER OFF
Create table TempData( OrderID Int) --用於存結果
Declare @xmlData varchar(8000)
declare @idoc int
DECLARE @doc varchar(1000)
declare @i int
set @xmlData="
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:updatable="true">
<s:AttributeType name="OrderID" rs:number="1" rs:basecatalog="Northwind" rs:basetable="Orders" rs:basecolumn="OrderID"
rs:keycolumn="true" rs:autoincrement="true">
<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row OrderID="10249"/>
<z:row OrderID="10251"/>
<z:row OrderID="10258"/>
<z:row OrderID="10260"/>
<z:row OrderID="10265"/>
<z:row OrderID="10267"/>
<z:row OrderID="10269"/>
<z:row OrderID="10270"/>
<z:row OrderID="10274"/>
<z:row OrderID="10275"/>
</rs:data>
</xml>"
exec @i=sp_xml_preparedocument @idoc OUTPUT, @doc
INSERT INTO TempData (orderID)
Select * From OPENXML(@idoc, /*這後面的我該怎麼寫?????) */
WITH (OrderID INT)
知道的請出手,我急用。謝謝。
问题点数:200、回复次数:23Top
1 楼N_chow(Yukon)回复于 2002-05-14 14:46:17 得分 0
第一次使用XML,各位幫幫忙啦。
因XML文件是用ADODB.Recordset生成的,所以與Books on line上的例子很不相同,我試了很久,還是沒能試出來。
Top
2 楼weixy()回复于 2002-05-14 14:48:56 得分 0
你们等级是星的写的汉字我咋都看不到。Top
3 楼N_chow(Yukon)回复于 2002-05-14 15:00:48 得分 0
有沒人試過????
Top
4 楼weixy()回复于 2002-05-14 15:01:53 得分 0
SELECT *
FROM OPENXML (@idoc, "/rs:data/z:row",1)
WITH (orderid, int)
Top
5 楼leimin(黄山光明顶)回复于 2002-05-14 15:06:13 得分 0
强烈关注!!!!!Top
6 楼N_chow(Yukon)回复于 2002-05-14 15:07:11 得分 0
給 weixy() :
首先謝謝你的回複。
您的回複不正確,錯誤訊息:
Server: Msg 6603, Level 16, State 1, Line 39
XML parsing error: Reference to undeclared namespace prefix: "rs".
Top
7 楼N_chow(Yukon)回复于 2002-05-14 15:14:51 得分 0
從錯誤訊息上來看,問題是出在了
exec @i=sp_xml_preparedocument @idoc OUTPUT, @doc
這里,但從幫助上看,參數xpath_namespaces是說
"指定用於 OPENXML 的 XPath 運算式之資料列與資料行的命名空間宣告,預設值為 <root xmlns:mp="urn:schemas-microsoft-com:xml-metaprop">。
但我又不知怎樣傳特定的命名空間宣告。
Top
8 楼N_chow(Yukon)回复于 2002-05-14 15:24:16 得分 0
好,去掉了命名空間。錯誤訊息不出了,可是結果卻不正確.
exec @i=sp_xml_preparedocument @idoc OUTPUT, @doc
INSERT INTO TempData (orderID)
SELECT *
FROM OPENXML (@idoc,"/xml/data/row/",1)
WITH (orderid int)
select * from TempData
OrderID
-----------
NULL
--我有十筆資料,但卻返回了一筆為NULL值的記錄??
why?Top
9 楼weixy()回复于 2002-05-14 15:27:14 得分 0
"/xml"Top
10 楼N_chow(Yukon)回复于 2002-05-14 15:27:43 得分 0
好,去掉了命名空間。錯誤訊息不出了,可是結果卻不正確.
exec @i=sp_xml_preparedocument @idoc OUTPUT, @doc
INSERT INTO TempData (orderID)
SELECT *
FROM OPENXML (@idoc,"/xml/data/row/",1)
WITH (orderid int)
select * from TempData
OrderID
-----------
NULL
--我有十筆資料,但卻返回了一筆為NULL值的記錄??
why?Top
11 楼weixy()回复于 2002-05-14 15:29:59 得分 0
你写的汉字我看不到,不知道你在说什么。
rs s是作用域,data不知道是什么
试试"/xml/data"Top
12 楼weixy()回复于 2002-05-14 15:32:38 得分 0
row后面不应有/Top
13 楼weixy()回复于 2002-05-14 15:38:32 得分 0
row后面不应有/Top
14 楼N_chow(Yukon)回复于 2002-05-14 15:44:21 得分 0
不對,不對,還是不對。
此問題在XML版塊也有討論,期待您的關注。
http://www.csdn.net/expert/topic/720/720906.xml?temp=.9353449Top
15 楼weixy()回复于 2002-05-14 18:35:40 得分 0
1。前面 set @xmlData= “……” 后面exec @i=sp_xml_preparedocument @idoc OUTPUT, @doc 不应该是@doc 应是@XmlData。
2。改正后,
exec @i=sp_xml_preparedocument @idoc OUTPUT, @xmlData
select @i
select @idoc
select @xmlData
Select * From OPENXML(@idoc, "/xml/data/row/orderid", 1 )
执行,结果为:
-----------
0
(所影响的行数为 1 行)
-----------
41
(所影响的行数为 1 行)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="el
(所影响的行数为 1 行)
id parentid nodetype localname prefix namespaceuri datatype prev text
-------------------- -------------------- -----------
(所影响的行数为 0 行)
说明你的XML格式有问题,它的元素不是OrderID
本人没有用过,说的不对请包含。
Top
16 楼weixy()回复于 2002-05-14 19:03:49 得分 0
你可以先用XSL来定义好格式。Top
17 楼N_chow(Yukon)回复于 2002-05-14 19:36:12 得分 0
我的XML文件是用ADODB.Reocrdset生成的,怎麼會有問題????Top
18 楼weixy()回复于 2002-05-14 23:10:07 得分 50
drop table TempData
go
SET QUOTED_IDENTIFIER OFF
Create table TempData( OrderID Int) --用於存結果
Declare @xmlData varchar(8000)
declare @idoc int
DECLARE @doc varchar(1000)
declare @i int
set @xmlData="
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:rs="urn:schemas-microsoft-com:rowset"
xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:updatable="true">
<s:AttributeType name="OrderID" rs:number="1" rs:basecatalog="Northwind" rs:basetable="Orders" rs:basecolumn="OrderID"
rs:keycolumn="true" rs:autoincrement="true">
<s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
</s:AttributeType>
<s:extends type="rs:rowbase"/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row OrderID="10249"/>
<z:row OrderID="10251"/>
<z:row OrderID="10258"/>
<z:row OrderID="10260"/>
<z:row OrderID="10265"/>
<z:row OrderID="10267"/>
<z:row OrderID="10269"/>
<z:row OrderID="10270"/>
<z:row OrderID="10274"/>
<z:row OrderID="10275"/>
</rs:data>
</xml>"
exec @i=sp_xml_preparedocument @idoc OUTPUT, @xmlData , "<ns xmlns:b="urn:schemas-microsoft-com:rowset" xmlns:c="#RowsetSchema" />" --"ms xmlns:b="urn:schemas-microsoft-com:rowset""
select @i
--INSERT INTO TempData (orderID)
Select * From OPENXML(@idoc, "/xml/b:data/c:row")
WITH (OrderID INT )--"@OrderID")
exec sp_xml_removedocument @idoc
唉呀,折腾死我了。
Top
19 楼N_chow(Yukon)回复于 2002-05-15 09:10:54 得分 0
呵呵,樓上,你真行!!
I 服了U!
謝謝.Top
20 楼weixy()回复于 2002-05-15 11:16:34 得分 0
呵呵,是不是在谢谢我,我看不见。不用谢了。我现在没工作,要谢就帮我找份工作了哈哈。
Top
21 楼badtank(爱与宿命的连发枪)回复于 2002-05-15 11:27:52 得分 0
upTop
22 楼N_chow(Yukon)回复于 2002-05-15 11:36:20 得分 0
呵呵,你在哪個城市?Top
23 楼chief(大副)回复于 2002-05-15 11:56:11 得分 150
my mail: wd2h@21cn.com
給我你的mail,將碼發給你Top
24 楼badtank(爱与宿命的连发枪)回复于 2002-05-15 12:29:02 得分 0
浪潮通软的,交个朋友?Top
25 楼weixy()回复于 2002-05-15 13:13:50 得分 0
谢谢大家。weixiangyang@163.net weixiangyang@sina.comTop
-
相关文章
