tempad
Readygo技术搜索引擎 >>PHP技术 >> XML求救: 怎樣用OpenXML生成一個紀錄集?

XML求救: 怎樣用OpenXML生成一個紀錄集?

Readygo技术搜索引擎 网络搜索 efish 2008-1-14 6:26:21

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

责任编辑: efish 参与评论 查找更多:
相关文章
如何不补全信息而添加新记录(就是允许有的字段的值… 如何不补全信息而添加新记录(就是允许有的字段的值为空)?
我的表某列为idtity,如何得知我将要插入的行sql ser… 我的表某列为idtity,如何得知我将要插入的行sql server会给我哪个id呢,
关于如何实时检测文本控件的输入字符问题? 关于如何实时检测文本控件的输入字符问题?
程序中使用了Interbase,使用的是ibdatabase组件,没… 程序中使用了Interbase,使用的是ibdatabase组件,没有用BDE。运行程序的机器上是否必须安装Interbase Server?我把gds32.dll安装到客户
紧急求援!编译能通过,但就不能执行!各位大大有什… 紧急求援!编译能通过,但就不能执行!各位大大有什么高招??
Powerdesigner的优点以及缺点讨论以及如何设置字段的… Powerdesigner的优点以及缺点讨论以及如何设置字段的中文header以及label,来者有份...
小第想实现让一个程序自已删除自已,请各位大侠不吝… 小第想实现让一个程序自已删除自已,请各位大侠不吝赐教
关于按钮创建问题,高手请回答,谢谢 关于按钮创建问题,高手请回答,谢谢
如何把一台服务器上的SQL SERVER中的所有东西完全移… 如何把一台服务器上的SQL SERVER中的所有东西完全移植到另一台服务器上的SQL SERVER上
请教有关Buffer,c++ Builder中用DoubleBuffer=true… 请教有关Buffer,c++ Builder中用DoubleBuffer=true可以消除位图移动时的灰色底痕,不知vc 中该怎么解决
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎